2011-08-02 33 views
1

我有這樣的方法:如何編寫NUnit的的TestCase測試字符串的正確列表返回

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

我想單元測試這個使用NUnit。這是一類車輛的一部分。

A Vehicle可以是不同的類型,即。 CarBoatTruck

在我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); 
} 

因此,這是我是如何嘗試使用的TestCase來測試它。但是我不確定這是否正確,因爲單元測試不應該包含ifs

也可能這是一個奇怪的方法來編寫不同類型的測試?

任何人有更好的建議嗎?

回答

6

我會把這些分成多個測試。通過這樣做,你可以寫一個測試正常行爲(非船)以及船。如果以後這些測試中的任何一個都失敗了,您將不必嘗試找出數據驅動測試的迭代失敗。測試將爲自己說話。

在這種情況下,我會寫一個船的行爲和一個非船。其他的迭代是不是有趣的(likly使用這個測試是驗證爲其他非船相同的代碼路徑)

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? 
} 

你可以添加額外的測試,以驗證該結果集有所有你想要的,以及數據。

無論如何,希望這有助於

相關問題