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の場合は3urlHelper自体をスタブアウトすることを検討する必要があります(私は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と直接対話しません。代わりに、ラッパーと通信します。ラッパーのインターフェースを用意することで、コントローラーのテストが非常に簡単になります。