2015-04-12 66 views
2

我正在编写一个库,并且它的行为在调试或发布时基于模式而有所不同。我想写一个单元测试TestDebugBehaviourTestReleaseBehaviour。是否可以设置测试以在调试/发布模式下运行?如何编写用于调试和发布配置的测试

+1

边注:这通常是坏主意,如果你打算让其他人使用该库 - 在许多情况下/测试和其它假设工作一样只有一种口味开发。如果你的图书馆行为不同,它可能会给用户带来不愉快的惊喜。提供配置可以让你在当前的“调试”和“发布”模式之间进行切换,而无需重新编译(因为副作用可以避免与您自己解决的问题完全相同)。 –

+0

@AlexeiLevenkov它只是在调试模式下运行时引发异常。正如计划。 –

回答

2

我想你应该可以用预处理指令来做到这一点。我在下面的例子中使用了xunit;你可能不得不用不同的属性来修饰你的测试方法。

该测试只能在调试模式下执行。

#if DEBUG 

[Fact] 
public void ThisIsATestThatWillOnlyRunInDebugMode() 
{ 
    throw new Exception("I am running in debug mode."); 
} 

#endif 

此测试并不完全在释放模式运行而言,它只是运行在不同的调试模式的任何模式,但足够一般良好。

#if !DEBUG 

[Fact] 
public void ThisIsATestThatWillNotRunInDebugMode() 
{ 
    throw new Exception("I am running in in something other than debug mode."); 
} 

#endif 
+1

或#if DEBUG ... #ELSE ... #endif – Mick

+0

这是编写单元测试的有效方法吗?不应该为这两种配置进行单元测试吗? – Puchacz

-1

不,这是不可能的。如果你想进行这样的比较,只需编译&在两个版本中运行它并比较结果。如果某个方法在发布模式下行为不正确,请使用记录器来追踪该方法的行为并检查出现问题的位置。

+2

#if DEBUG有什么问题? – Mick