使用HttpContext的单元测试方法

本文关键字:测试方法 单元 HttpContext 使用 | 更新日期: 2023-09-27 18:02:05

    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降为自动操作。那可真麻烦。

你能想到更好的东西或改进这些想法吗?

注意,这个方法被封装在一个类库中。我想保持这种状态

使用HttpContext的单元测试方法

您的代理字符串是嘲弄的自然场所。不是从该方法中的请求上下文获取代理字符串,而是将其传递或注入到方法/类中。这样,您就可以在测试和运行时对它进行控制。