我有问题。
#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”代码块非常丰富。
答案 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
(评论的声誉不够)