Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing VS 2008单元测试的if条件语句_Unit Testing_Visual Studio 2008 - Fatal编程技术网

Unit testing VS 2008单元测试的if条件语句

Unit testing VS 2008单元测试的if条件语句,unit-testing,visual-studio-2008,Unit Testing,Visual Studio 2008,是否有一个类似于“if DEBUG”的条件语句,可以在VS2008中用于确定代码是否从单元测试运行?(我们正在使用MS的内置单元测试。) 例如: #如果!单元测试 //做一些我们在单元测试时不想看到的GUI内容 #endif请注意,任何此类定义仅在编译时才有意义。因此,您必须以一种方式编译代码,以另一种方式删除代码。因此,您的代码将“感觉到”它正在由单元测试框架运行。您需要两个单独的组件。如果这真的是你想要的,那么定义一个符号就很容易了。只需转到“项目属性”、“构建”选项卡,并在条件编译符号下添

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

例如:

#如果!单元测试

//做一些我们在单元测试时不想看到的GUI内容


#endif

请注意,任何此类定义仅在编译时才有意义。因此,您必须以一种方式编译代码,以另一种方式删除代码。因此,您的代码将“感觉到”它正在由单元测试框架运行。您需要两个单独的组件。如果这真的是你想要的,那么定义一个符号就很容易了。只需转到“项目属性”、“构建”选项卡,并在条件编译符号下添加“UNITTEST”。

我同意这样的评论,即一般情况下避免这样做,但我自己过去也这样做过。IIRC,它被用来在“单元测试数据库”(即一次性)和“中包含有用数据的测试数据库”之间切换,这两个数据库被单元测试意外删除了太多次


我们的解决方案是有一个UnitTestDetector类(或类似的类),它有一个静态属性“InUnitTest”。这将通过NUnit是否加载到当前appdomain(同样,IIRC)来检测。在第一次探测之后,结果将被缓存以防止性能受损。

您所说的条件语句不可用,因为它是一个编译器指令;您必须有一个特定于测试的构建,您可以定义自己的测试编译器指令。但是,正如评论员所指出的,您不应该为测试运行与生产中不同的代码,这会违背目的。

谢谢。避免使用特定于单元测试的代码是我计划采取的方法,但有人劝说我,如果有这种方法存在的话,我会仔细研究它。现在我不做了!:)

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

更改专门用于测试的软件的行为会否定测试,因为您不再测试所提供的内容。您确定这是解决您试图解决的问题的正确方法吗?测试期间出现这种特殊行为的原因是什么?同意。避免(在可能的情况下)编写任何在测试中与野外反应不同的代码。谢谢。这本来是我计划采取的方法,但是被说服了,如果这条路线存在的话,我会沿着这条路线往下看。。。