如何才能在DEBUG模式下运行单元测试?

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.我建议将所有单元测试移到它自己的项目中,而不是在你的版本中包含这个.


Ste*_*ger 6

试试这个:

#if DEBUG

// here is your test

#endif
Run Code Online (Sandbox Code Playgroud)


Tho*_*der 6

如果您使用的是 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)


Tam*_*ege 5

如果您使用的是NUnit,则可以使单元测试方法成为条件:

[System.Diagnostics.Conditional("DEBUG")]
public void UnitTestMethod()
{
   // Tests here
}
Run Code Online (Sandbox Code Playgroud)

这样,它将仅在DEBUG构建中执行。我没有使用Visual Studio单元测试的丰富经验,但是我很确定它也可以在VS中使用。

编辑:其他人提到了条件编译指令。由于多种原因,我认为这不是一个好主意。要了解有关条件编译指令和条件属性之间差异的更多信息,请在此处阅读Eric Lippert的精彩文章

  • 我正在使用MSTest,看起来条件引擎不符合条件属性... (2认同)