如何解决ResultFilterAttribute 单元测试没有看到更改的结果
我正在尝试测试我的 ResultFilterattribute
。当我逐步调试调试器时,我看到 context.Result
被设置,但随后在测试中 Assert
失败,因为状态代码的值仍然为 200。我设置测试的方式有什么问题?
public class ETagFilterattribute : ResultFilterattribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
var request = context.HttpContext.Request;
if (!(request.Method == "GET" && context.Result is ObjectResult obj && obj.Value is IGenerateEtag entity)) {
base.OnResultExecuting(context);
return;
}
var etag = $"\"{entity.GenerateEtag()}\"";
context.HttpContext.Response.Headers["ETag"] = etag;
var ifNoneMatch = request.Headers["if-none-match"];
if (ifNoneMatch != StringValues.Empty)
return;
foreach (var value in ifNoneMatch.ToArray())
if (value == etag) {
context.Result = new StatusCodeResult((int)HttpStatusCode.NotModified);
break;
}
}
}
我正在使用这个 Xunit 测试:
[Fact]
public async Task ShouldReturnNotModified()
{
var result = new Value();
var ctx = CreateResultExecutingContext(result);
var etag = result.GenerateEtag();
ctx.HttpContext.Request.Headers.Add("if-none-match",$"\"{etag}\"");
var filter = new ETagFilterattribute();
filter.OnResultExecuting(ctx);
Assert.Equal(StatusCodes.Status304NotModified,ctx.HttpContext.Response.StatusCode);
}
答案:
感谢@Nkosi,我能够通过用这个替换最后一个 Assert
来解决它:
var actionResult = Assert.IsType<StatusCodeResult>(ctx.Result);
Assert.Equal(StatusCodes.Status304NotModified,actionResult.StatusCode);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。