使用Rhinomock的C#Mock Request.Browser.MajorVersion
我在MVC控制器中有以下代码:使用Rhinomock的C#Mock Request.Browser.MajorVersion,c#,asp.net-mvc,rhino-mocks,C#,Asp.net Mvc,Rhino Mocks,我在MVC控制器中有以下代码: var isIe6 = Request.Browser.Type.ToUpper().Contains("IE") && Request.Browser.MajorVersion < 7; public string Method() { return Request.Browser.MajorVersion.ToString(); } 这只会在安装程序中引发一个异常,表示需要设置浏
var isIe6 = Request.Browser.Type.ToUpper().Contains("IE") && Request.Browser.MajorVersion < 7;
public string Method()
{
return Request.Browser.MajorVersion.ToString();
}
这只会在安装程序中引发一个异常,表示需要设置浏览器。我也尝试过将它与上面的HttpBrowserCapabilitiesWrapper
结合使用,但它仍然表示需要设置浏览器
如何在MVC中创建stub/mock out 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
}
您可以使用
BrowserCapabilitiesFactory
(如上所述)创建HttpBrowserCapabilities
,使用,并且类似地,您可以使用正确的字符串模拟任何其他浏览器MajorVersion
:
public HttpRequestBase GetInterenetExplorer11StubRequest()
{
return GetBrowserCapabilitiesStub("Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko");
}
public HttpRequestBase GetBrowserCapabilitiesStub(string userAgentString)
{
var browser = new HttpBrowserCapabilities
{
Capabilities = new Hashtable { { string.Empty, userAgentString } }
};
var factory = new BrowserCapabilitiesFactory();
factory.ConfigureBrowserCapabilities(new NameValueCollection(), browser);
var request = MockRepository.GenerateStub<HttpRequestBase>();
request.Stub(a => a.Browser).Return(new HttpBrowserCapabilitiesWrapper(browser));
return request;
}
公共HttpRequestBase GetInterenetExplorer11StubRequest()
{
返回GetBrowserCapabilitiesStub(“Mozilla/5.0(WindowsNT6.3;Trident/7.0;rv:11.0)像Gecko”);
}
公共HttpRequestBase GetBrowserCapabilitiesStub(字符串userAgentString)
{
var browser=新的HttpBrowser功能
{
能力=新哈希表{{string.Empty,userAgentString}
};
var factory=新的BrowserCapabilitiesFactory();
ConfigureBrowserCapabilities(新的NameValueCollection(),浏览器);
var request=MockRepository.GenerateStub();
request.Stub(a=>a.Browser).Return(新的HttpBrowserCapabilitiesWrapper(浏览器));
返回请求;
}
请给我们看一个(即显示问题的最简单的单元测试)。我会在编译时将其标记为答案,最后一行是错误点!我已经更新了代码,用stubbed Browser属性创建了HttpRequest存根
public string Method()
{
return Request.Browser.MajorVersion.ToString();
}
public HttpRequestBase GetInterenetExplorer11StubRequest()
{
return GetBrowserCapabilitiesStub("Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko");
}
public HttpRequestBase GetBrowserCapabilitiesStub(string userAgentString)
{
var browser = new HttpBrowserCapabilities
{
Capabilities = new Hashtable { { string.Empty, userAgentString } }
};
var factory = new BrowserCapabilitiesFactory();
factory.ConfigureBrowserCapabilities(new NameValueCollection(), browser);
var request = MockRepository.GenerateStub<HttpRequestBase>();
request.Stub(a => a.Browser).Return(new HttpBrowserCapabilitiesWrapper(browser));
return request;
}