在发布模式下运行NUnit测试

时间:2014-02-26 09:03:10

标签: c# visual-studio unit-testing nunit

我有问题。

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

当我们在调试模式下运行时,我们对标识符进行硬编码。在发布中,它显然是动态设置的。

现在谈到单元测试映射代码时,我必须这样做:(最初我刚刚测试了'Release case',然后在调试模式下失败了)

#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”代码块非常丰富。

3 个答案:

答案 0 :(得分:3)

如果必须运行Release,请使用argument / config:Release

答案 1 :(得分:2)

我不确定我们对项目结构有足够的了解,以适当的方式回答这个问题。它主要取决于您使用这些值的位置和方式。

理想情况下,您应该通过接口从某处获取这些ID。这样你就可以伪造并切换该接口后面的实现,允许你在需要时返回硬编码的虚拟值来测试使用这些值的逻辑。

您可以设置一个配置选项,允许您指定是使用实际实现,还是使用虚拟数据提供程序来允许切换而无需重新编译。

更新:由于上述内容对您的具体问题并不是一个很好的答案,这是另一种尝试:在Resharper > Options > Tools > Unit Testing下,有一个选项从以下位置运行测试:,您可以在其中指定要使用的文件夹,而不是默认的项目输出文件夹。

这可能是一个很长的过程,但也许您可以配置VS以将项目的发行版本构建到某个特定文件夹,并参考它进行测试,即使主项目构建配置设置为Debug?

答案 2 :(得分:0)

使用参数时请记住区分大小写很重要,例如/ config:从Xeon的答案中释放,否则你会得到一个误导性的错误:

Invalid : Path_to_your_file
File type is not supported error

(评论的声誉不够)