[英]Unit test method with HttpContext
public SupportedBrowser GetBrowser()
{
string agent = HttpContext.Current.Request.Headers["User-Agent"];
if (agent.Contains("iPad"))
{
return new iPad();
}
else
return new InternetExplorer7();
}
我使用 Microsoft 的单元测试工具(MS-Test?)为上述方法设置了单元测试。 因为单元测试不是web站点,所以没有HttpContext。 我可以想到两个解决方案:
A. 添加一个可选参数: GetBrowser(bool debug = false)
。 这允许当前代码在不重构的情况下执行。 然后在调试为真时修改该方法以创建模拟上下文或硬编码用户代理。
B. 添加依赖注入。 从其他地方获取上下文。 不过,我认为我需要通过 ninject 加入 IoC 以使其自动化。 那是很多工作。
你能想出更好的东西或改进这些想法吗?
请注意,此方法位于 class 库中。 我想保持这种状态。
您的代理字符串是 mocking 的自然位置。 与其从该方法内的请求上下文中获取代理字符串,不如将其传递或注入到方法/类中。 这样您就可以在测试和运行时控制它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.