在发布模式下运行NUnit测试

Joh*_*ter 5 c# nunit unit-testing visual-studio

我有个问题。

#if DEBUG
        ca.ConveyancingAttorneyID = "C0B68DC3-C396-4264-880B-1A699C53A8CE";
        ca.ConveyancingFirmID = "C0B68DC3-C396-4264-880B-1A699C53A8CE";
#endif
Run Code Online (Sandbox Code Playgroud)

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

现在,当涉及到对映射代码进行单元测试时,我必须这样做:(最初我只是测试了“发布案例”,然后在调试模式下总是失败了)

#if RELEASE
        Guid id = new Guid("1A92CE5A-D956-486B-9B65-0A3630EF0285"); 
#endif
#if DEBUG
        Guid id = new Guid("C0B68DC3-C396-4264-880B-1A699C53A8CE"); 
#endif
Run Code Online (Sandbox Code Playgroud)

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

有没有一种方法可以强制NUnit / Visual Studio Testrunner / Resharper Testrunner始终以发布模式运行测试?还是有更好的方法来解决此问题,请记住,解决方案中这类“ #if DEBUG”代码块非常丰富。

Kja*_*tan 2

我不确定我们对您的项目结构了解得足够多,无法以适当的方式回答这个问题。这基本上取决于您在何处以及如何使用这些值。

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

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

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

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