在发布模式下运行NUnit测试

6

我有一个问题。

#if DEBUG
        ca.ConveyancingAttorneyID = "C0B68DC3-C396-4264-880B-1A699C53A8CE";
        ca.ConveyancingFirmID = "C0B68DC3-C396-4264-880B-1A699C53A8CE";
#endif

当我们在调试模式下运行时,我们会硬编码标识符。在发布模式下,显然是动态设置的。
现在当涉及到测试映射代码时,我必须这样做:(最初我只测试了“发布情况”,这将始终在调试模式下失败)
#if RELEASE
        Guid id = new Guid("1A92CE5A-D956-486B-9B65-0A3630EF0285"); 
#endif
#if DEBUG
        Guid id = new Guid("C0B68DC3-C396-4264-880B-1A699C53A8CE"); 
#endif

这不是理想的情况。而且要记住(并提醒队友)始终在发布模式下运行单元测试也很麻烦。我们没有持续集成设置,因此测试只在本地运行。

有没有一种方法可以强制NUnit / Visual Studio Testrunner / Resharper Testrunner始终在发布模式下运行测试?或者有更好的方法来解决这个问题,考虑到这些“#if DEBUG”代码块在解决方案中相当丰富。


1
我们没有持续集成设置,因此测试只在本地运行。这似乎是潜在的问题。 - Jakub Konecki
6
知道了。在我加入之前,没有单元测试。 - Johan Venter
@JohanVenter #if DEBUG Assert.Fail("...") #endif - BrainSlugs83
3个回答

3
如果您必须运行Release,请使用参数 /config:Release。

2
我应该在哪里添加这个参数?你能再详细解释一下吗? - silkfire

2
我不确定我们是否足够了解您的项目结构来充分回答这个问题。这主要取决于您在何处以及如何使用这些值。
理想情况下,您应该通过接口从某个地方获取这些ID。这将让您伪造并切换接口背后的实现,允许您在需要测试使用值的逻辑时返回硬编码的虚拟值。
您可以设置一个配置选项,允许您指定是否使用实际实现或虚拟数据提供程序,以允许在无需重新编译的情况下进行切换。
更新:由于上面并不是对您特定问题的很好的答案,这里有另一个尝试:在Resharper > Options > Tools > Unit Testing下,有一个选项Run tests from:,您可以指定一个文件夹来替代默认项目输出文件夹。
这可能是一种冒险的做法,但也许您可以配置VS将您的项目构建为发布版本到某个特定的文件夹,并引用那个文件夹进行测试,即使主项目构建配置设置为Debug。

是的,针对接口编码并使用类似Unity的工具来替换“虚假”实现会很好。不幸的是,将其引入到该项目中可能会带来很多麻烦。也许我会尝试像你说的那样将构建的dll发送到一个文件夹中。但从可维护性的角度来看,这本身可能就是个问题?我不太清楚如何保持引用同步。 - Johan Venter
将此标记为答案,提供多个选项。可以抽象出一个配置设置,在单元测试时强制将其设置为“发布”。谢谢。 - Johan Venter

0

在使用参数时,记住大小写敏感性很重要,例如从Xeon的回答中使用/config:Release,否则你会得到一个误导性的错误:

Invalid : Path_to_your_file
File type is not supported error

(声望不够,无法评论)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接