2
私のプロジェクトはASP.NET Core 2.0 Webアプリケーションです。asp.netコア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