JUnit 测试在返回 StringBuilder 的方法上使用assertEquals 失败

问题描述 投票:0回答:1
在测试车队管理应用程序时,多项测试未能确保返回 StringBuilder 的特定车辆报告包含为其提供的实际数据。有多个报告和多个测试,但都失败了。作业的一部分是用 StringBuilder 替换正在测试的类中的每个字符串连接实例,但无论如何,在我这样做之前测试就失败了。

我正在测试的方法返回的报告包含列表中每个元素的详细信息,而我编写测试的方式是断言文本数据本身的相等性,这感觉不对,但我不这样做知道更好的选择是什么。

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。

java junit assertion bluej
1个回答
0
投票
您的代码中有一些拼写错误,您应该将

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"));
如果您添加了两辆车

© www.soinside.com 2019 - 2024. All rights reserved.