我有一個單元測試,測試如果異常是擲,但這種例外僅在調試模式下拋出(通過[條件(「調試」)]屬性)。如果我在發佈模式下運行此測試,它將失敗。我試圖在測試中應用相同的屬性,但沒有考慮到它。如何才能使單元測試僅在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