繁体   English   中英

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

[英]How can I make a unit test run in DEBUG mode only?

我有一个单元测试,测试是否抛出异常,但是这个异常只是抛出调试模式(通过[条件(“DEBUG”)]属性)。 如果我在发布模式下运行此测试,则会失败。 我试图在测试中应用相同的属性,但没有考虑到它。

如何在发布模式下排除测试? 在Release模式下运行单元测试甚至是否应该坚持调试模式是否有意义?

至于你的大多数问题,它在某种程度上取决于你使用的单元测试工具。 但是,一般来说,您需要的是预处理程序指令

//C#
#ifndef DEBUG
    //Unit test
#endif

也许适合你的情况

//C# - for NUnit
#if !DEBUG
    [Ignore("This test runs only in debug")] 
#endif 

但是关于是否在发布版本中保留单元测试? 我会给出一个响亮的NO。 我建议将所有单元测试移到它自己的项目中,而不是在你的版本中包含这个。

尝试这个:

#if DEBUG

// here is your test

#endif

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

[System.Diagnostics.Conditional("DEBUG")]
public void UnitTestMethod()
{
   // Tests here
}

这样它只会在DEBUG构建中执行。 我没有很多Visual Studio单元测试的经验,但我很确定这也应该在VS中工作。

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

NUnit框架的类似解决方案(仅调试测试工作):

public class DebugOnlyAttribute : NUnitAttribute, IApplyToTest
{

    private const string _reason = "Debug only";

    public void ApplyToTest(Test test)
    {
        if (!Debugger.IsAttached)
        {
            test.RunState = RunState.Ignored;
            test.Properties.Set(PropertyNames.SkipReason, _reason);
        }

    }
}

[DebugOnly]
[Test]
public void TestMethod()
{ 
//your test code
}

如果你正在使用XUnit,你可以使用Jimmy Bogard描述的以下方法扩展fact属性:

public class RunnableInDebugOnlyAttribute : FactAttribute
{
    public RunnableInDebugOnlyAttribute()
    {
        if (!Debugger.IsAttached)
        {
            Skip = "Only running in interactive mode.";
        }
    }
}

然后你可以使用如下:

[RunnableInDebugOnly]
public void Test_RunOnlyWhenDebugging()
{
    //your test code
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM