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