无法为简单测试设置controller.Url属性

时间:2013-05-25 06:39:31

标签: 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 个答案:

答案 0 :(得分: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交互。相反,它会与包装器对话。通过为包装器提供接口,可以非常轻松地测试控制器。

相关问题