检测Visual Studio Test是否正在运行

时间:2010-04-06 17:23:53

标签: visual-studio tdd mstest

是否有一种简单的方法可以检测您是否在Visual Studio测试的上下文中运行而不是调试或发布?

这是场景 - 我们有一个工厂类,我们在整个现有代码库中大量使用,我想在每个类中重构而不是重构它,所以我们可以用一个返回mock / fake对象的默认工厂替换它,我如果它检测到它在“测试”模式下运行,可以在工厂类本身添加一些东西来返回那些模拟对象。

4 个答案:

答案 0 :(得分:4)

我认为将测试用例代码与域代码混合起来并不是一个好主意。

我建议您为工厂提供一个接口,并为该接口实现模拟以进行测试。

更好的是,您可以使用模拟框架,例如RhinoMocks。

答案 1 :(得分:2)

我同意mcabral的评估,并参考了原因(我认为重构是值得的),但就机制而言......

在Visual Studio中,您可以在解决方案和项目级别定义除“调试”和“发布”之外的任意数量的配置。因此,您可以创建“测试”配置,最有可能基于调试配置。接下来,在包含工厂类的项目中创建“测试”配置。

在项目属性窗口中,选择“构建”选项卡。选择“测试”配置并定义条件编译符号:“TESTING”。

现在,您可以在代码中使用

#if TESTING
     // build stubs
#else
     // build real implementations
#endif

答案 2 :(得分:1)

您是否听说过依赖注入或IOC?这种情况就是

因此,我建议使用IOC容器来提供对象而不是自定义工厂。如果您对其中某些产品有特殊要求,可以将工厂放在IOC容器中。

然后,您可以在测试中以不同方式配置容器(或根本不使用它),并且该代码将不在您的主代码中。

答案 3 :(得分:1)

您可以测试当前的流程可执行文件。它不是很优雅,但它有效。

if (Process.GetCurrentProcess().ProcessName.ToLower().Contains("vstest.executionengine"))
{
  // we are in a ms unit test
}
else
{
  // normal programm execution
}