簡體   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