VS 2008 #if单元测试的条件声明

时间:2008-10-09 14:51:22

标签: unit-testing visual-studio-2008

是否存在类似“#if DEBUG”的条件语句,可以在VS 2008中用于确定代码是否从单元测试运行? (我们正在使用MS的内置单元测试。)

例如:

#if !UNITTEST

// Do some GUI stuff we don't want to see when unit testing

#endif

5 个答案:

答案 0 :(得分:1)

我赞同这些评论说要避免一般性地这样做 - 但我过去自己也这样做了。 IIRC,它用于在“单元测试数据库”(即一次性)和“有用数据的测试数据库”之间切换 - 单元测试被意外擦除了太多次......

我们的解决方案是拥有一个具有单个静态属性“InUnitTest”的UnitTestDetector类(或类似的东西)。这可以通过NUnit是否加载到当前应用程序域(同样,IIRC)来检测。在第一次探测之后,结果将被缓存以防止它被性能击中。

答案 1 :(得分:1)

您正在讨论的条件语句不可用,因为它是编译器指令;您必须具有特定于测试的构建,您可以定义自己的TEST编译器指令。但是,正如评论者所指出的那样 - 你不应该为测试运行不同的代码而不是生产中的代码,否则就会失败。

答案 2 :(得分:1)

谢谢。避免使用单元测试专用代码是我计划采用的方法,但是如果它存在的话,我们会谈到这条路线。现在我不会这样做! :)

答案 3 :(得分:0)

请注意,任何此类定义仅在编译时有意义。因此,您必须以一种方式编译它以获取代码,以及另一种方法来删除该代码。因此,您的代码将“感知”它由单元测试框架运行。你需要两个独立的组件。如果这真的是你想要的,那么定义一个符号就很容易了。只需转到Project Properties,“Build”选项卡,然后在Conditional Compilation Symbols下添加“UNITTEST”。

答案 4 :(得分:0)

+1克里斯回答。这听起来像是“Test Fake”或“Test Double”类型的好地方。您是否可以将要隐藏的GUI内容提取到虚拟或抽象方法中,然后在(在测试项目中)创建一个派生自测试类的类并覆盖GUI代码?