簡體   English   中英

如何編寫Nunit TestCases以測試正確的字符串列表返回

[英]How to write Nunit TestCases to test the correct List of strings is returned

我有一個類似的方法:

public virtual IList<string> Validate()
{
   ...
}

我想使用NUnit對它進行單元測試。 這是車輛類的一部分。

Vehicle可以是不同類型,即。 Car Boat Truck等。

在我的TestFixture的頂部,我設置了VehicleTypes

private VehicleType[] _vehicleTypes;

[SetUp]
public void MyTestInitialize()
{
    transScope = new TransactionScope();

    var boat= new VehicleType { Name = "boat" };
    var car = new VehicleType { Name = "car" };
    var truck = new VehicleType { Name = "truck" };

    _vehicleTypes= new VehicleType[] { boat, car, truck };

    ...
}

我想要的是測試僅從船的方法發送回錯誤消息。

我的單元測試如下:

[TestCase(0, "This vehicle is inappropriate because it doesn't have wheels")]
[TestCase(1, null)]
[TestCase(2, null)]
public void Validate_Vehicle_ReturnsAppropriateErrorMessage(int vehicleType, string expectedResult)
{
   var vehicle = new Vehicle { VehicleType = _vehicleTypes[vehicleType] };

   var results = vehicle.Validate();

   string result;

   if (results.Count == 0)
      result = null;
   else
      result = results[0];

   Assert.IsTrue(expectedResult == result);
}

因此,這就是我嘗試使用TestCases對其進行測試的方式。 但是我不確定這是正確的方法,因為單元測試中不應包含ifs嗎?

也許這是為不同類型編寫測試的怪異方法嗎?

有人有更好的建議嗎?

我將這些分解為多個測試。 通過這樣做,您可以編寫一個測試正常行為(非乘船)以及乘船的程序。 如果將來這些測試中的任何一個失敗,您將不必嘗試找出數據驅動測試的哪個迭代失敗。 測試將說明一切。

在這種情況下,我將為船的行為寫一個,為非船的行為寫一個。 其他迭代沒什么意義(並且使用與其他非實驗性驗證相同的代碼路徑進行驗證)

public void Validate_VehicleIsBoat_ReturnsAppropriateErrorMessage()
{   
   string expectedResult = "This vehicle is inappropriate because it doesn't have wheels";
   var vehicle = new Vehicle { VehicleType = VehicleType.Boat };  //or whatever it is in your enum

   var results = vehicle.Validate();   

   Assert.AreEqual( expectedResult, results[0] );
}

public void Validate_VehicleIsNotBoat_DoesNotReturnErrorMessage()
{   
   var vehicle = new Vehicle { VehicleType = VehicleType.Car };  //or whatever it is in your enum

   var results = vehicle.Validate();   

   Assert.IsNull( results ); // or whatever the no error message case is. Will results[0] have an empty string?
}

您可以添加其他測試以驗證結果集是否也具有所需的所有數據。

無論如何,希望這會有所幫助

暫無
暫無

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

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