如何使用asp.net core 2测试具有属性的方法?

时间:2017-09-26 13:50:46

标签: c# asp.net testing asp.net-core asp.net-core-2.0

我的项目是ASP.NET Core 2.0 Web应用程序。

如何通过调用包含属性的方法来测试我自己的书面属性是否正常工作?

例如:

属性

[AttributeUsage(AttributeTargets.Method)]
public class ValidateUserLoggedInAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext context)
  {
     var controller = (BaseController)context.Controller;
     if (!controller.UserRepository.IsUserLoggedIn)
     {
        var routeValueForLogin = new RouteValueDictionary(new { action = "Login", controller = "Home", area = "" });
        context.Result = new RedirectToRouteResult(routeValueForLogin);
     }
  }
}

控制器:

[ValidateUserLoggedIn]
public IActionResult Start()
{
    ...
}

测试:

[TestMethod]
public void Test()
{
    // Act
    var result = this.controllerUnderTest.Start() as RedirectToRouteResult;

    // Assert
     Assert.IsNotNull(result);
     Assert.IsFalse(result.Permanent);

     var routeValues = result.RouteValues;

     const string ControllerKey = "controller";
     Assert.IsTrue(routeValues.ContainsKey(ControllerKey));
     Assert.AreEqual("Home", routeValues[ControllerKey]);

     const string ActionKey = "action";
     Assert.IsTrue(routeValues.ContainsKey(ActionKey));
     Assert.AreEqual("Login", routeValues[ActionKey]);
}

我已经通过创建ActionExecutingContext为该属性编写了一个测试,但我也想为控制器方法测试它。

1 个答案:

答案 0 :(得分:1)

这需要进行集成测试,您可以使用内存测试服务器或运行站点发送实际请求,然后验证预期的行为。

请参阅Integration testing in ASP.NET Core

您已经使用单元测试单独测试了该属性,可以理解的是,如果测试涵盖了预期行为,它将在集成和生产中按预期运行