我正在尝试设置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等等。有什么想法吗?
答案 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交互。相反,它会与包装器对话。通过为包装器提供接口,可以非常轻松地测试控制器。