簡體   English   中英

單元測試 - 我應該分開測試還是進行一次測試?

[英]Unit testing - should I split up tests or have a single test?

我希望這不是一個愚蠢的問題,而是我一直在想的事情。 我希望編寫單元測試一個方法,其中包含一些邏輯來檢查某些值是否為空。

public void MyMethod(string value1, string value2)
{
    if(value1 != null)
    {
     //do something (throw exception)
    }

    if(value2 != null)
    {
     //do something (throw exception)
    }

    //rest of method
}

我想通過將null值傳遞給方法來測試它。 我的問題是我應該為每個參數創建一個單元測試,還是可以創建一個單元測試,檢查如果我將value1設置為null然后檢查如果我將value2設置為null會發生什么。

[TestMethod]
public void TestMyMethodShouldThrowExceptionIfValue1IsNull()
{
    //test
}

[TestMethod]
public void TestMyMethodShouldThrowExceptionIfValue2IsNull()
{
    //test
}

要么

[TestMethod]
public void TestMyMethodWithNullValues()
{
  //pass null for value1
  //check

  //pass null for value2
  //check
}

或者它有什么不同? 我想我在某個地方讀到你應該限制自己每單元測試一個斷言。 它是否正確?

在此先感謝Zaps

您應該為每個測試用例 (斷言)編寫單元測試以避免斷言輪盤

“理想的”單元測試只測試一件事,以便准確地找出錯誤。

實際上,這並不像大多數TDD支持者那樣重要,因為測試不會經常失敗,並且發現哪個斷言失敗幾乎沒有時間與調查和解決問題所涉及的其他工作相比。

在編寫測試時做額外的工作以便在失敗時(可能永遠不會發生)保存自己的工作是YAGNI的一種形式。

如果有多個方法除了輸入更多的方法聲明之外沒有額外的工作,你應該這樣做,但如果它導致重復的設置代碼,我看到在一個測試方法中測試幾個條件絕對沒有錯。

如果您在同一測試方法中進行兩次測試,則您的測試不會進行“單元測試”。

例如,如果第一個null值的測試失敗怎么辦?
如果兩個測試都在同一個測試方法中,則可能不會執行第二個測試; 這意味着對第二個null值的測試取決於對第一個null值的測試。

另一方面,如果您有兩種不同的測試方法,則可以完美隔離地測試每種情況。


從你的MyMethod方法的代碼來看,這兩個條件之間沒有聯系; 這意味着對於這兩個條件的測試之間不應該有任何依賴性。

所以:你應該使用兩個不同的測試。

推斷出一種非技術性的思想。

假設您有車,並且您想測試顏色。

測試可能是:

車是紅色的。 車是藍色的。 汽車被塗上了。

現在擁有“彩繪”和“藍色”可能是有意義的,但它們確實是不同的東西。 如果你測試紅色和藍色,它將永遠失敗 - 或者從隔離的角度看失敗是沒有意義的。

總是按照你的建議一次測試一件事,很多東西都包含測試套件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM