您如何模拟ASP.NET MVC管道进行测试?
示例我想在控制器中对方法进行单元测试。
该方法有一个属性。
该属性是管道的一部分。
我如何模拟模拟httpcontext或mvvc管道来测试方法?
答案 0 :(得分:0)
您没有说明您正在使用的模拟框架或管道的含义。这是一个如何使用FakeItEasy模拟HttpContext(和所有依赖对象)的示例。
public static HttpContextBase FakeHttpContext()
{
var context = A.Fake<HttpContextBase>();
var request = A.Fake<HttpRequestBase>();
var response = A.Fake<HttpResponseBase>();
var session = A.Fake<HttpSessionStateBase>();
var server = A.Fake<HttpServerUtilityBase>();
A.CallTo( () => request.QueryString ).Returns( new NameValueCollection() );
A.CallTo( () => request.Form ).Returns( new NameValueCollection() );
A.CallTo( () => request.Headers ).Returns( new NameValueCollection() );
A.CallTo( () => context.Request ).Returns( request );
A.CallTo( () => context.Response ).Returns( response );
A.CallTo( () => context.Session ).Returns( session );
A.CallTo( () => context.Server ).Returns( server );
return context;
}
public static void SetFakeControllerContext( Controller controller)
{
var httpContext = FakeHttpContext();
ControllerContext context = new ControllerContext( new RequestContext( httpContext, new RouteData() ), controller );
controller.ControllerContext = context;
}
然后在你的单元测试中,你调用SetFakeControllerContext
传递一个控制器本身的实例。
var controller = new HomeController();
Faker.SetFakeControllerContext(controller);
如果您正在尝试测试该属性是否已执行,则不会。您可以单独测试属性和控制器。您不需要测试属性是否运行,因为它是基础结构的一部分,测试它不是您的工作。