Jul*_*lin 12 .net debugging unit-testing
我有一个单元测试,测试是否抛出异常,但是这个异常只是抛出调试模式(通过[条件("DEBUG")]属性).如果我在发布模式下运行此测试,则会失败.我试图在测试中应用相同的属性,但没有考虑到它.
如何在发布模式下排除测试?在Release模式下运行单元测试甚至是否应该坚持调试模式是否有意义?
C. *_*oss 15
至于你的大多数问题,它在某种程度上取决于你使用的单元测试工具.但是,一般来说,您需要的是预处理程序指令
//C#
#ifndef DEBUG
//Unit test
#endif
Run Code Online (Sandbox Code Playgroud)
也许适合你的情况
//C# - for NUnit
#if !DEBUG
[Ignore("This test runs only in debug")]
#endif
Run Code Online (Sandbox Code Playgroud)
但是关于是否在发布版本中保留单元测试?我会给出一个响亮的NO.我建议将所有单元测试移到它自己的项目中,而不是在你的版本中包含这个.
如果您使用的是 XUnit,则可以通过扩展事实属性来使用Jimmy Bogard 所描述的以下方法:
public class RunnableInDebugOnlyAttribute : FactAttribute
{
public RunnableInDebugOnlyAttribute()
{
if (!Debugger.IsAttached)
{
Skip = "Only running in interactive mode.";
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以按如下方式使用它:
[RunnableInDebugOnly]
public void Test_RunOnlyWhenDebugging()
{
//your test code
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是NUnit,则可以使单元测试方法成为条件:
[System.Diagnostics.Conditional("DEBUG")]
public void UnitTestMethod()
{
// Tests here
}
Run Code Online (Sandbox Code Playgroud)
这样,它将仅在DEBUG构建中执行。我没有使用Visual Studio单元测试的丰富经验,但是我很确定它也可以在VS中使用。
编辑:其他人提到了条件编译指令。由于多种原因,我认为这不是一个好主意。要了解有关条件编译指令和条件属性之间差异的更多信息,请在此处阅读Eric Lippert的精彩文章。
| 归档时间: |
|
| 查看次数: |
6471 次 |
| 最近记录: |