Ano*_*use 1 asp.net-mvc nunit unit-testing
我有一个方法,如:
public virtual IList<string> Validate()
{
...
}
Run Code Online (Sandbox Code Playgroud)
我想用NUnit进行单元测试.这是类车辆的一部分.
A 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 };
...
}
Run Code Online (Sandbox Code Playgroud)
我想要的是测试只从船的方法发回错误消息.
我的单元测试如下:
[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);
}
Run Code Online (Sandbox Code Playgroud)
所以这就是我尝试使用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?
}
Run Code Online (Sandbox Code Playgroud)
您可以添加其他测试来验证结果集是否包含您想要的所有数据.
无论如何,希望这会有所帮助