2014-02-26 33 views
4

运行NUnit的测试中,我有一个问题。在释放模式

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

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

,当涉及到单元测试映射代码,我不得不这样做:(initally我只是测试的“释放的情况下”,这将随后alwasy在调试模式下失败)

#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

'我们没有一个持续集成设置,所以测试是只有永远在本地运行。“ - 这似乎是潜在的问题。 –

+4

请跟我说说。在我加入之前,没有进行单元测试。 –

+0

@JohanVenter'#if DEBUG''Assert.Fail(“...”)''endif'? – BrainSlugs83

回答

1

我不知道我们足够了解你的项目以适当的方式来回答这个结构。它基本上取决于你在哪里以及如何使用这些值。

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

你可以建立一个配置选项允许你指定是否使用真正的实现,或虚拟数据提供商允许无需重新编译开关。

更新:由于上述是不是一个真正的伟大的回答你的具体问题,这里的另一个尝试:在Resharper > Options > Tools > Unit Testing,存在从一个选项运行测试:,在那里你可以指定一个文件夹,而不是使用默认项目输出文件夹。

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

+0

是的,对接口进行编码并且可能使用类似Unity的东西对于替换“假”实现是非常好的。不幸的是,这将是一个相当麻烦的介绍到这个项目。 也许我会尝试像你说的内置的dll发送到一个文件夹。从可维护性的角度来看,可能本身就是一种痛苦?不知道如何保持引用同步? –

+0

标记为答案,给出了多个选项。可能只是抽象一个配置设置,我可以在单元测试时强制“释放”。谢谢 –

3

如果你必须运行版本,使用参数/配置:释放

0

记住大小写使用参数时例如事项/配置:从至强的答案版本,否则你会得到一个误导性的错误:

Invalid : Path_to_your_file 
File type is not supported error 

(没有足够的口碑评论)