asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – asp.net mvc如何正确测试控制器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在测试控制器时遇到了困难.原来我的测试控制器看起来像这样
SomethingController CreateSomethingController()
{
    var somethingData = FakeSomethingData.CreateFakeData();
    var fakeRepository = FakeRepository.Create();

    var controller = new SomethingController(fakeRepository);

    return controller;
}

这适用于大多数测试,直到我得到request.IsAjaxrequest()部分代码.所以我不得不模拟httpContext和httprequestBase.所以我的代码然后改为看起来像:

public class FakehttpContext : httpContextBase
{
    bool _isAjaxrequest;

    public FakehttpContext( bool isAjaxrequest = false )
    {
        _isAjaxrequest = isAjaxrequest;
    }

    public override httprequestBase request
    {
        get
        {
            String ajaxrequestHeader = "";

            if ( _isAjaxrequest )
                ajaxrequestHeader = "XMLhttprequest";

            var request = new mock<httprequestBase>();
            request.SetupGet( x => x.Headers ).Returns( new WebHeaderCollection 
            {
                {"X-requested-With",ajaxrequestHeader} 
            } );

            request.SetupGet( x => x["X-requested-With"] ).Returns( ajaxrequestHeader );

            return request.object;
        }
    }

    private iprincipal _user;

    public override IPrincipal User
    {
        get
        {
            if ( _user == null )
            {
                _user = new FakePrincipal();
            }
            return _user;
        }
        set
        {
            _user = value;
        }
    }
}


SomethingController CreateSomethingController()
{
    var somethingData = FakeSomethingData.CreateFakeData();
    var fakeRepository = FakeRepository.Create();

    var controller = new SomethingController(fakeRepository);

    ControllerContext controllerContext = new ControllerContext( new FakehttpContext( isAjaxrequest ),new RouteData(),controller );
     controller.ControllerContext = controllerContext;

    return controller;
}

现在它已进入我的控制器中的那个阶段,我称之为Url.Route和Url为null.所以看起来我需要开始为我的控制器模拟路线.

我似乎花了更多的时间在google上搜索伪造/模拟对象,然后调试以确保我的假货是正确的,而不是实际编写测试代码.有没有更简单的方法来测试控制器?我看过MvcContrib的TESTControllerBuilder,它可以解决一些问题,但似乎并没有做任何事情.有没有其他可用的工作,让我专注于编写测试而不是编写模拟?

谢谢

解决方法

您可以使用一些开箱即用的库,其中包含一些这些对象.例如 RhinoMock,NMock …等我个人使用 Moq – 它足够好且免费.在Moq中我最喜欢的是linq表达式.

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – asp.net mvc如何正确测试控制器全部内容,希望文章能够帮你解决asp.net-mvc – asp.net mvc如何正确测试控制器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。