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

Asp.net mvc 无法为简单测试设置controller.Url属性,asp.net-mvc,unit-testing,fakeiteasy,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(thi

我正在尝试设置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();
}

我用FAKITITHASE模拟我的HTTPSCONTROBASE等。有什么想法?

< P>你应该考虑破解URLHELPER本身,比如(我使用NMOK-但是我相信语义应该与你的嘲弄框架相似):

var target=new AccountController();
var urlHelper=MockRepository.GenerateMock();
Url=urlHelper;
//现在您可以存根urlHelper的各种功能,如:
//urlHelper.Stub(u=>u.islocalur(“blahUrl”)).Return(true);
还有一些其他问题。UrlHelper没有虚拟方法,因此很难对这些方法进行存根。在这种情况下,您可以在UrlHelper上有一个包装器,并将其注入控制器。使用包装器并将调用委托给实际的urlHelper实例


因此,控制器不会直接与urlHelper交互。相反,它将与包装器对话。通过为包装器提供一个接口,可以很容易地测试控制器。

你应该考虑破解URLHELPER本身,比如(我使用NMOK-但是我相信语义应该与你的嘲弄框架相似):

var target=new AccountController();
var urlHelper=MockRepository.GenerateMock();
Url=urlHelper;
//现在您可以存根urlHelper的各种功能,如:
//urlHelper.Stub(u=>u.islocalur(“blahUrl”)).Return(true);
还有一些其他问题。UrlHelper没有虚拟方法,因此很难对这些方法进行存根。在这种情况下,您可以在UrlHelper上有一个包装器,并将其注入控制器。使用包装器并将调用委托给实际的urlHelper实例


因此,控制器不会直接与urlHelper交互。相反,它将与包装器对话。通过为包装器提供一个接口,可以很容易地测试控制器。

我也这样做了,但它仍然不会设置属性!我通过将controller.Url包装到一个可重写的方法来解决这个问题。我也这样做了,但它仍然不会设置属性!我通过将controller.Url包装到一个可重写的方法来解决这个问题。如果您在AccountController上设置Url属性,并且对该属性的非null立即测试失败,那么我建议问题与测试和/或伪造无关。看起来你的AccountController有点问题。如果您尝试尽可能地隔离问题以证明/反驳这一点,这可能会有所帮助。如果您在AccountController上设置Url属性,并且该属性的非空立即测试失败,那么我建议问题与测试和/或伪造无关。看起来你的AccountController有点问题。如果你试着尽可能地孤立问题来证明/反驳这一点,可能会有所帮助。
        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);