使用HttpContext的单元测试方法

时间:2011-07-13 18:52:44

标签: c# asp.net unit-testing

    public SupportedBrowser GetBrowser()
    {
        string agent = HttpContext.Current.Request.Headers["User-Agent"];

        if (agent.Contains("iPad"))
        {
            return new iPad();
        }
        else
            return new InternetExplorer7();
    }

我使用微软单元测试工具(MS-Test?)为上述方法设置了单元测试。因为单元测试不是网站,所以没有HttpContext。我可以想到两个解决方案:

一个。添加可选参数:GetBrowser(bool debug = false)。这允许当前代码在没有重构的情况下执行。然后在debug为true时修改方法以创建模拟上下文或硬编码用户代理。

B中。添加依赖注入。从其他地方获取上下文。虽然,我想我需要通过ninject放入IoC以实现自动化。那是很多工作。

你能想到更好的事情或改进这些想法吗?

注意,此方法位于类库中。我想保持这种方式。

1 个答案:

答案 0 :(得分:2)

您的代理字符串是模拟的自然场所。不是从此方法中的请求上下文中获取代理字符串,而是将其传递给方法/类。这样你就可以在测试和运行时控制它。