每當我想鍛鍊的,否則只能在一個艱難的達成代碼的某一路徑重現condition
,如:測試難以觸及的代碼路徑
if (condition) { code to be tested }
我有true
值or
它:
if (true || condition) { code to be tested }
有沒有更優雅的方法?
每當我想鍛鍊的,否則只能在一個艱難的達成代碼的某一路徑重現condition
,如:測試難以觸及的代碼路徑
if (condition) { code to be tested }
我有true
值or
它:
if (true || condition) { code to be tested }
有沒有更優雅的方法?
我想更多elegant way
作爲原料,the logical negation operator (!)
;
if (!condition) { code to be tested }
但更安全的方式進行調試和測試目的您可以使用預處理指令(按我commet)。完成測試後簡單地刪除或更改#define UnreachableTest
#define UnreachableTest //should be on the top of the class/page
#if (UnreachableTest)
condition = !condition; //or
condition = true;
#endif
if (condition) { code to be tested }
是的,它在我看來更多優雅。只有在滿足條件時纔會發揮作用。但我喜歡它,我想在大多數使用情況下它會很好。 –
在這種情況下,您可以使用「預處理器指令」在調試期間更改條件以進行測試。如; '#define UnreachableTest' on top ...'#if(UnreachableTest)condition =!condition#endif'然後你的實際代碼如下。 – Kaf
對不起,我必須給這個答案-1。這是一個非常糟糕的代碼味道,以改變測試的邏輯條件。這很危險,因爲它可能導致有人忘記刪除「!」並最終生成代碼,使條件翻轉併產生錯誤/錯誤。 –
更優雅的解決方案是使用mocks。使基於相關性或參數決定:
var mock = new Mock<IFoo>();
mock.Setup(foo => foo.IsBar).Returns(true);
var sut = new Sut(mock.Object);
sut.DoSomething();
而在你的系統下測試:
public void DoSomething()
{
if (_foo.IsBar)
// code path to test
}
我會認爲這不是一個單元測試場景,因爲它沒有在問題中提到。到目前爲止,對這樣的代碼進行即時測試最簡單的方法是使用調試器的Set Next Statement命令。
如果需要,在if語句中設置一個斷點,或者直到它到達該語句爲止。然後右鍵單擊if()語句正文中的下一行,然後選擇「設置下一個語句」。代碼將繼續在該行執行,完全跳過if()。
好的+1。我一定會使用它。但在這種特定的情況下,我想至少運行幾次這種方式很尷尬。 –
你的方法用「true or」和if(!condition)的方法是最簡單的。這是我喜歡的一個大型程序的方法
創建一個函數,我們稱之爲testme(常量字符串)。而不是在if test中插入true,則插入testme,並使用一些標識該代碼段的字符串。
if (testme("Location 123") || condition) { code to be tested }
然後,使用某種配置文件的,或者爭論你的程序(我比較喜歡的配置),你完全可以控制何時TESTME(「位置123」)將返回true。你可以在很多地方使用相同的功能。只需更改配置文件來測試每一個。
+1。爲了這個目的,我一直在使用一個定義在其他地方的布爾變量。 –
將代碼在單獨的方法中進行測試。然後你可以調用方法並繞過條件。現在,您不必擔心添加「真實」或者更重要的是忘記刪除它。
您也可以爲該方法添加單元測試,以便您可以修改傳遞給它的參數並測試所需的所有場景。
您是否試圖通過調試器運行代碼?我會建議尋找'單元測試'這一點。模擬解決方案可能有助於使您的代碼可測試。通過將它作爲一個單元測試寫出來,您現在不僅可以測試您的代碼,還可以繼續測試! –