Web API 全局设置代码,也用于单元测试
Web API global setup code, also for unit tests
假设我有一些全局应用程序设置代码,在我的 Global.asax
、Application_Start
中定义。例如禁用证书检查:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// (...)
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
// (...)
}
}
说我也有一个单元测试,这取决于上面的代码是运行。但是在我的单元测试中,Application_Start
没有被调用,因为我直接实例化了控制器:
var controller = new TestSubjectController();
ASP.NET 或 Web API 中是否有某种机制可以解决此问题?什么是定义设置代码的最佳方式,以防止我的代码重复?
研究
我已经回答了关于 SO 的多个问题。他们中的大多数人专注于单元测试 Application_Start
本身,但这不是这里的目标。其他问题倾向于使用应用程序外部 (HTTP) 接口进行测试,但是我希望能够在我的单元测试中直接实例化控制器。
除了 Batavia 的建议之外,您还可以使用 [TestInitialize]
属性方法或您选择的单元测试框架等效于为某个 class 中的所有测试调用公共静态方法,这将减少您担心的重复。
假设我有一些全局应用程序设置代码,在我的 Global.asax
、Application_Start
中定义。例如禁用证书检查:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// (...)
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
// (...)
}
}
说我也有一个单元测试,这取决于上面的代码是运行。但是在我的单元测试中,Application_Start
没有被调用,因为我直接实例化了控制器:
var controller = new TestSubjectController();
ASP.NET 或 Web API 中是否有某种机制可以解决此问题?什么是定义设置代码的最佳方式,以防止我的代码重复?
研究
我已经回答了关于 SO 的多个问题。他们中的大多数人专注于单元测试 Application_Start
本身,但这不是这里的目标。其他问题倾向于使用应用程序外部 (HTTP) 接口进行测试,但是我希望能够在我的单元测试中直接实例化控制器。
除了 Batavia 的建议之外,您还可以使用 [TestInitialize]
属性方法或您选择的单元测试框架等效于为某个 class 中的所有测试调用公共静态方法,这将减少您担心的重复。