[英]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.