ASP.NET MVC統合テストにおけるIFILTERPROVIDERの設定
-
21-12-2019 - |
質問
このコードを使用して、[テスト]でMVCアプリを設定しています(再因子と[設定]などに移動します)。:
// arrange
var mockSomeService = new Mock<ISomeService>();
mockSomeService.Setup(m => m.IsTrue()).Returns(false);
RouteConfig.RegisterRoutes(RouteTable.Routes);
FilterProviders.Providers.Add(new FilterProvider(mockSomeService.Object));
var controller = new HomeController();
// act
var result = controller.Index() as ViewResult;
.
何らかの理由でFilterProviderで定義されている承認された認証者は蹴らないが、MVCアプリを手動でテストするとうまく機能します。この統合テストでは、セットアップの面で何かが足りませんか?
解決
フィルタはリクエストパイプラインの一部として呼び出されて、テストに入ったときのアクションメソッドの直接呼び出しによってトリガされることはありません。
私はあなたがそこに欠けているとは思わないが、要求パイプラインとフィルタの呼び出しは他の多くの人々によって大きくテストされているので、代わりにフィルタオブジェクトに対して直接テストを書くことができます。
他のヒント
ライブラリーに取り組んできて、すべてのフィルタ、バリデータ、ルーティング、および認証があらゆるフィルタ、検証済みのすべてのMVCアプリケーションのテストに役立ちました。次の例では、カスタムフィルタプロバイダを追加する方法を示します。それを使用する必要がある場合は、NUGETパッケージXANIA.aspNet.Simulatorを追加する必要があります。
using Xania.AspNet.Simulator;
.....
[Test]
public void CustomFilterProviderTest()
{
// arrange
var action = new AccountController().Action(c => c.ChangePassword(null));
action.FilterProviders.Add(new CustomFilterProvider());
// act
var result = action.Execute();
// assert
Assert.AreEqual("Your Message", result.ViewBag.Message);
Assert.IsTrue(result.ModelState.IsValid);
Assert.IsInstanceOf<ViewResult>(result.ActionResult);
...
}
.
GitHubでもっと見ることができます https://github.com/ibrahimbensalah/xania..aspnet.simulator / tree / master / xania.aspnet.simulator.tests
所属していません StackOverflow