我有一个单元测试,测试如果异常是掷,但这种例外仅在调试模式下抛出(通过[条件(“调试”)]属性)。如果我在发布模式下运行此测试,它将失败。我试图在测试中应用相同的属性,但没有考虑到它。如何才能使单元测试仅在DEBUG模式下运行?
我怎样才能排除在Release模式测试?在Release模式下运行单元测试还是应该坚持调试模式?
我有一个单元测试,测试如果异常是掷,但这种例外仅在调试模式下抛出(通过[条件(“调试”)]属性)。如果我在发布模式下运行此测试,它将失败。我试图在测试中应用相同的属性,但没有考虑到它。如何才能使单元测试仅在DEBUG模式下运行?
我怎样才能排除在Release模式测试?在Release模式下运行单元测试还是应该坚持调试模式?
至于大部分的问题,它有点取决于什么单元测试工具使用的上。但是,一般来说你要什么都preprocessor directives
//C#
#ifndef DEBUG
//Unit test
#endif
也许您的具体情况
//C# - for NUnit
#if !DEBUG
[Ignore("This test runs only in debug")]
#endif
但至于是否要离开的单元测试的发行版?我会给出一个响亮的NO。我建议将所有的单元测试移到它自己的项目中,并且不要在你的发布中包含这个。
当然,我所有的单元测试是在另一个项目,但我仍然可以运行他们在Release模式...... – 2009-10-30 11:51:32
为什么你真的希望他们在发布和调试不同? – 2009-10-30 12:36:02
我想确保我的代码在调试和发布模式下的行为相同。但是,在这种特殊情况下,我知道* *,该测试将在Release模式失败,因为异常只应在调试模式(设计)抛出 – 2009-10-30 13:23:02
试试这个:
#if DEBUG
// here is your test
#endif
这工作,但我认为这是一个过于激烈的解决方案。相反,我使用[Ignore]属性(仍然包含在#if!DEBUG ... #endif中,但我更喜欢它)。 – 2009-10-30 15:12:45
如果你使用NUnit,你可以让你的单元测试方法条件:
[System.Diagnostics.Conditional("DEBUG")]
public void UnitTestMethod()
{
// Tests here
}
这样只会在DEBUG执行的基础之上。我没有很多有关Visual Studio单元测试的经验,但我很确定这也适用于VS。
编辑:其他人提到了条件编译指令。我认为这不是一个好主意,原因有很多。要详细了解条件编译指令和条件属性之间的区别,请阅读Eric Lippert's excellent article here。
我使用MSTest的,它看起来像条件属性不被测试引擎荣幸... – 2009-10-30 12:01:19
你可以把条件属性上DoUnitTestMethod helper方法,你会从UnitTestMethod调用。然后这将成为一个总是通过发布模式进入的空测试。尽管如此,获取像ExpectedException这样的事情会更棘手。最简单的就是在整个测试用例中使用#if DEBUG。 – yoyo 2014-07-08 23:44:45
如果您使用的xUnit,您可以通过扩展属性其实用下面的方法as described by Jimmy Bogard:
public class RunnableInDebugOnlyAttribute : FactAttribute
{
public RunnableInDebugOnlyAttribute()
{
if (!Debugger.IsAttached)
{
Skip = "Only running in interactive mode.";
}
}
}
,然后你可以使用这个如下:
[RunnableInDebugOnly]
public void Test_RunOnlyWhenDebugging()
{
//your test code
}
相关:HTTP: //stackoverflow.com/questions/3133988/make-mstest-respect-conditional-attribute – 2016-05-03 14:32:54