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