2017-09-26 7 views
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しかし、私はまたコントローラメソッドのためにそれをテストしたい。

+1

その場合、実際のリクエストをメモリ内テストサーバーまたは実行中のサイトに送信し、予想される動作を確認する統合テストが必要です。https://docs.microsoft.com/en-us/aspnet/core/testing/integration-testing – Nkosi

+2

メソッドをテストし、属性を別々にテストする方が良い。 – DavidG

答えて

1

これは、インメモリテストサーバーまたは実行中のサイトで実際の要求を送信し、予想される動作を確認する統合テストが必要になります。

Integration testing in ASP.NET Core

あなたを参照してくださいあなたはすでにユニットテストと分離して属性をテストして、それが統合して、生産に提供期待通りに振る舞うだろうと理にかなってテスト対象と期待される動作

関連する問題