如何对ActionFilterAttribute进行单元测试

ova*_*n22 8 unit-testing xunit xunit.net actionfilterattribute .net-core

我想在.NET Core 2.0 API项目中测试ActionFilterAttribute,并想知道最好的方法.注意,我不是试图通过控制器动作来测试它,而只是测试ActionFilterAttribute本身.

我怎么去测试这个:

    public class ValidateModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                context.Result = new BadRequestObjectResult(context.ModelState);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 22

创建上下文的实例将其传递给过滤器并断言预期的行为

例如

[TestClass]
public class ValidateModelAttributeTest {
    [TestMethod]
    public void Invalid_ModelState_Should_Return_BadRequestObjectResult() {
        //Arrange
        var httpContext = new DefaultHttpContext();
        var context = new ActionExecutingContext(
            new ActionContext
            {
                HttpContext = httpContext,
                RouteData = new RouteData(),
                ActionDescriptor = new ActionDescriptor(),
            },
            new List<IFilterMetadata>(),
            new Dictionary<string, object>(),
            new Mock<Controller>().Object);

        var sut = new ValidateModelAttribute();

        //Act
        sut.OnActionExecuting(context);

        //Assert
        context.Result.Should().NotBeNull()
            .And.BeOfType<BadRequestObjectResult>();
    }
} 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回复.在接受之后发现这一点也有帮助:/sf/ask/2564057401/ (2认同)