asp.net mvc rhino嘲笑模拟httprequest值

问题描述 投票:2回答:1

我正在尝试编写测试,我可以模拟HttpRequestBase来返回这样的帖子值吗?我该如何实现?

var collection = new NameValueCollection();
collection.Add("Id", "1");
collection.Add("UserName", "");


var mocks = new MockRepository();

  using (mocks.Record())
  {
      Expect.Call(requestBase.Params).Return(collection);
  }

[基本上,我有一个要求我模拟请求发布参数而不是表单值,因为UI客户端不是html表单,有什么想法如何伪造/模拟httprequest发布参数?返回类型为nameVaueCollection

asp.net asp.net-mvc rhino-mocks
1个回答
6
投票

您不希望听到此消息,但是您将以错误的方式进行此操作。您应该将模型用于输入,并让模型绑定器填充属性,而不是直接从请求参数中获取值。这将使您的生活(包括模拟)变得更加容易,因为您将提供模型作为操作方法的参数,而不必模拟HttpRequest对象。

var model = new UserModel { ID = 1, UserName = string.Empty };

var controller = new FooController();

var result = controller.FooAction( model );

如果必须使用参数,那么至少我建议您对模拟使用AAA语法。

var request = MockRepository.GenerateMock<HttpRequestBase>();
var context = MockRepository.GenerateMock<HttpContextBase>();

var collection = new NameValueCollection();   
collection.Add("Id", "1");   
collection.Add("UserName", "");

context.Expect( c => c.Request ).Return( request ).Repeat.Any();
request.Expect( r => r.Params ).Return( collection ).Repeat.Any()

var controller = new FooController();
controller.ControllerContext = new ControllerContext( context, new RouteData(), controller );

var result = controller.FooAction();

...

context.VerifyAllExpectations();
request.VerifyAllExpectations();
© www.soinside.com 2019 - 2024. All rights reserved.