簡體   English   中英

在單元測試中使用RowTest是一種好習慣嗎

[英]Is it a good practice to use RowTest in a unit test

NUnit和MbUnit具有RowTest屬性,該屬性使您可以將不同的參數集發送到單個測試中。

[RowTest]
[Row(5, 10, 15)]
[Row(3.5, 2.7, 6.2)]
[Row(-5, 6, 1)]
public void AddTest(double firstNumber, double secondNumber, double result)
{
  Assert.AreEqual(result, firstNumber + secondNumber);
}

我曾經是此功能的忠實擁護者。 我到處都用過。 但是,最近我不確定在單元測試中使用RowTest是否是一個好主意。 這里有更多原因:

單元測試必須非常簡單。 如果存在錯誤,則您不想花費大量時間來確定測試內容。 當您使用多行時,每行都有一組不同的發送參數,並測試不同的東西。

另外,我正在使用TestDriven.NET ,它允許我從IDE Visual Studio運行單元測試。 使用TestDrivent.NET,我無法指示運行特定的行,它將執行所有行。 因此,當我調試時,我必須注釋掉所有其他行,而只保留正在使用的行。

這是一個今天如何編寫測試的示例:

[Test]
public void Add_with_positive_whole_numbers()
{
   Assert.AreEqual(5, 10 + 15);
}

[Test]
public void Add_with_one_decimal_number()
{
   Assert.AreEqual(6.2, 3.5 + 2.7);
}

[Test]
public void Add_with_negative_number()
{
   Assert.AreEqual(1, -5 + 6);
}

說我仍然偶爾使用RowTest屬性,但是僅當我認為當我稍后需要進行此操作時,它不會使我放慢速度。

您認為在單元測試中使用此功能是個好主意嗎?

是。 它基本上是用不同的輸入一次又一次地執行相同的測試……省去了為每種不同的輸入組合重復自己的麻煩。
因此,堅持“只有一次”或DRY原則 因此,如果您需要更新此測試,則只需更新一個測試(與多個測試)。

每個行應該是來自不同集合的代表性輸入-即此輸入與該函數的行為的所有其他輸入都不相同。 RowTest實際上是NUnit的一個廣受歡迎的功能-源於MBUnit ...我認為Schlapsi將其寫為NUnit擴展,然后被提升為標准發行狀態。 NUnit GUI還將所有RowTests分組在GUI的一個節點下,並顯示哪個輸入失敗/通過。

我個人可以忍受“需要調試”的次要缺點。畢竟這是暫時注釋掉許多Row屬性(首先,大多數情況下,一旦我發現ScenarioX失敗並解決了問題,我就可以盯着該函數。無需逐步操作),或者相反,只需復制測試並暫時通過固定(問題)輸入即可

暫無
暫無

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

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