我正在测试的方法返回的报告包含列表中每个元素的详细信息,而我编写测试的方式是断言文本数据本身的相等性,这感觉不对,但我不这样做知道更好的选择是什么。
FleetManagement 类中正在测试的方法:
public StringBuilder allVehiclesReport()
{
StringBuilder str = new StringBuilder();
for (Vehicle vehicle : vehicles) {
str.append(vehicles.toString());
}
return str;
}
测试方法失败:
//setUp() omitted
@Test
public void testAllVehiclesReport()
{
//load test data, add to appropriate lists
//run method, assert that string returned contains test data
fleetMan1.addVehicle(vehicle1);
fleetMan1.addVehicle(vehicle2);
assertEquals("Vehicle: Buick Regal Sedan. VIN: 111\nVehicle: Chevy Corvette SportsCar. VIN: 122\n", fleetMan1.allVehiclesReport());
}
我猜手动输入整个内容可能不是最好的主意,即使我严格遵循它,但我不知道还能做什么。当该方法返回一个字符串时,第一次发生的部分失败是输入的数据最终会乱序,因此它将对照雪佛兰和福特检查福特和雪佛兰,但据我所知,我不能使用 contains (), 我可以吗?之前学习测试的时候,我们大多只涉及到了assertEquals。
vehicle
添加到字符串生成器而不是
vehicles
:
public StringBuilder allVehiclesReport() {
StringBuilder builder = new StringBuilder();
for (Vehicle vehicle : vehicles) {
builder.append(vehicle.toString());
}
return builder;
}
此外,要验证正确性,您可以检查断言,例如:
assertEquals(new StringBuilder("expected cars details"), fleetMan1.allVehiclesReport());
或者检查响应中是否提供了所需的汽车:
var actualResponse = fleetMan.allVehiclesReport().toString();
assertTrue(actualResponse.contains("expected car one"));
assertTrue(actualResponse.contains("expected car two"));
如果您添加了两辆车