【发布时间】:2008-12-02 12:57:04
【问题描述】:
我正在尝试找出一种将 Web 当前 http 上下文传递给服务类的方法(或使用对它的引用来初始化该类)。我这样做是为了将应用程序的其余部分从需要了解有关 http 上下文的任何信息中抽象出来。
我还希望服务可以使用 TDD 进行测试,可能使用 Mockable 框架之一。因此,最好使用接口而不是实际的类。
我想要实现的示例:
class WebInstanceService
{
private IHttpContext _Context;
public WebInstanceService( ... , IHttpContext HttpContext )
{
....
_Context = HttpContext;
}
// Methods...
public string GetInstanceVariable(string VariableName)
{
return _Context.Current.Session[VariableName];
}
}
我遇到的主要问题之一是没有 IHttpContext,.net http 上下文是无法模拟的抽象类的子类(容易吗?)。
另一个问题是我无法初始化类的全局实例,因为上下文与大多数请求无关。
我可以将类设为静态,并要求在调用时将 Context 传递给每个函数,即
public static string GetInstanceVariable(string VariableName, HttpContext Context)
{ ... }
但这并没有使该类更容易测试,我仍然需要创建一个 HttpContext 并且另外任何想要使用该类的非 Web 感知服务突然需要能够检索需要它们的 Context与 Web 服务器紧密耦合——这就是首先要创建这个类的全部原因。
我对所有建议持开放态度——尤其是那些人们知道有助于轻松进行 tdd 测试的建议。 人们会建议我如何解决这个问题?
干杯
【问题讨论】:
标签: c# .net asp.net-mvc tdd mocking