2
我的项目是一个ASP.NET Core 2.0 Web应用程序。如何使用asp.net core 2测试具有属性的方法?
如何通过调用包含该属性的方法来测试我自己的写入属性是否正常工作?
例如:
属性
[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
,但我也想测试它的控制器方法。
这将需要进行集成测试,您可以在其中发送实际请求(内存中测试服务器或运行站点),然后验证预期行为https://docs.microsoft.com/en-us/aspnet/core/testing/integration-testing – Nkosi
更好地测试方法并单独测试属性。 – DavidG