【发布时间】:2017-12-18 07:40:58
【问题描述】:
我在 MVC 控制器中有以下代码:
var isIe6 = Request.Browser.Type.ToUpper().Contains("IE") && Request.Browser.MajorVersion < 7;
我需要使用 Rhino Mocks 删除第二部分。我试过这个:
HttpRequest.Stub(a => a.Browser).Return(new HttpBrowserCapabilitiesWrapper(new HttpBrowserCapabilities
{
Capabilities = new Dictionary<string, string>
{
{"majorversion", "11"},
{"MajorVersion", "11"},
{"browser", "IE"},
{"isMobileDevice","false"}
}
}));
以上代码为代码中的MajorVersion 返回0。我也试过这个:
HttpRequest.Stub(a => a.Browser.MajorVersion).Return(11);
这只是在设置时抛出一个异常,说需要设置浏览器。我也试过结合上面的HttpBrowserCapabilitiesWrapper,但还是说需要设置浏览器。
如何在 MVC 中存根/模拟 Request.Browser.MajorVersion?
如果有人需要一些测试代码:
private BasketController sut;
protected HttpRequestBase HttpRequest;
[Test]
public void ShowsMajorVersionDoesNotWork()
{
// Arrange
HttpRequest.Stub(a => a.Browser).Return(new HttpBrowserCapabilitiesWrapper(new HttpBrowserCapabilities
{
Capabilities = new Dictionary<string, string>
{
{"majorversion", "11"},
{"MajorVersion", "11"},
{"browser", "IE"},
{"isMobileDevice","false"}
}
}));
//HttpRequest.Stub(a => a.Browser.MajorVersion).Return(11); // Throws Exception
sut = new BasketController()
{
Url = new UrlHelper(new RequestContext(HttpContext, new RouteData()), new RouteCollection())
};
sut.ControllerContext = new ControllerContext(HttpContext, new RouteData(), sut);
// Act
var result = sut.Method();
// Assert
Assert.That(result, Is.EqualTo("11")); // Fails, always returns 0
}
BasketController 中正在测试的方法:
public string Method()
{
return Request.Browser.MajorVersion.ToString();
}
【问题讨论】:
-
请告诉我们minimal reproducible example(即显示问题的最简单的单元测试)。
标签: c# asp.net-mvc rhino-mocks