0

我正在尝试设置 controller.Url 属性,但此测试失败。

我编写了这个测试,因为由于 controller.Url 为空,我无法测试控制器操作。

    [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 等。有什么想法吗?

4

1 回答 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 交互。相反,它会与包装器对话。通过为包装器提供接口,测试控制器将非常容易。

于 2013-05-25T13:49:19.900 回答