/ /単純なテストのcontroller.Urlプロパティを設定できません-asp.net-mvc、unit-testing、fakeiteasy

単純なテストのためにcontroller.Urlプロパティを設定できません - asp.net-mvc、unit-testing、fakeiteasy

controller.Urlプロパティを設定しようとしていますが、このテストは失敗します。

このテストを作成したのは、controller.Urlがnullであるためにコントローラーのアクションをテストできなかったためです。

    [TestMethod]
public void AccountController_Url_ShouldNotBeNull()
{
var target = new AccountController();
var url = new UrlHelper(
this.RequestContext(this.GetFakeHttpContextBase),
new RouteCollection());
target.Url = url;

target.Url.Should().NotBeNull();
}

FakeItEasyを使用してHttpContextBaseなどをモックしています。何かアイデアはありますか?

回答:

回答№1の場合は3

urlHelper自体をスタブアウトすることを検討する必要があります(私はNMockを使用していますが、セマンティクスはモックフレームワークでも同様である必要があると思います)。

        var target = new AccountController();
var urlHelper = MockRepository.GenerateMock<UrlHelper>();

target.Url = urlHelper;
//Now you could stub the various functions of urlHelper, like:
//urlHelper.Stub(u => u.IsLocalUrl("blahUrl")).Return(true);

他にもいくつか問題があります。UrlHelperには仮想メソッドがないため、メソッドをスタブ化するのは困難です。このような場合、UrlHelperにラッパーを設定し、それをコントローラーに挿入できます。ラッパーを使用して、呼び出しを実際のurlHelperインスタンスに委任します。

したがって、コントローラーはurlHelperと直接対話しません。代わりに、ラッパーと通信します。ラッパーのインターフェースを用意することで、コントローラーのテストが非常に簡単になります。