我编写了集成测试,它从队列接收xml文档,并从中创建一个将保留在数据库中的对象。现在要彻底测试,我想检查xml填充的所有字段,即大约20个字段。我为每个字段写了断言语句。
assertTrue (payload.shipmentNo == object.shipmentNo)
assertTrue (payload.shipmentEMEA.location == object.shipmentLocationMap.get(SHIPMENT_EMEA.toString()))
assertTrue (payload.shipmentAMER.location == object.shipmentLocationMap.get(SHIPMENT_AMER.toString()))
assertTrue (payload.shipmentAPAC.location == object.shipmentLocationMap.get(SHIPMENT_APAC.toString()))
assertTrue (payload.shipmentVersion == object.shipmentVersion)
assertTrue (payload.shipmentSourceId == object.shipmentSourceId )
assertTrue (payload.noOfItemsInShipment == object.noOfItemsInShipment)
assertTrue (payload.shipmentName == object.shipmentName)
assertTrue (payload.shipmentDate == object.shipmentDate)
assertTrue (payload.shipmentOwnerID == String.valueOf(object.shipmentOwnerID))
assertTrue (payload.shipmentClass == object.shipmentClass)
assertTrue ('STARTED' == object.status)
但我建议在testcase中使用单个assert语句。我一直在想如何能够做到这一点,实现的一种方法是编写一个if块,只有当所有值都与xml匹配时才返回true但是在这种情况下我无法确切知道哪个字段是失败。任何想法我怎么能实现这两件事,即我们有单一的断言+我确切地知道哪个领域失败了。
答案 0 :(得分:0)
“使用单个断言语句”在测试单个规则方面是一个很好的做法。这可以防止你编写一个检查太多东西的“大型测试”。
那么,你应该写一个断言语句吗?嗯,是的,你应该。但这是一个建议。测试时,您必须确保每个测试都测试一个功能。如果你的功能做了几件事(也许你应该重新思考并重构几个功能),那么每次测试的几个断言对我来说似乎没问题。
通常,请考虑一下:
编写测试时,每个测试应在不同情况下测试单个特征
此外,如果多个断言提高了可读性,请继续使用
答案 1 :(得分:0)
对于java,您可以使用assertj流畅断言:
http://joel-costigliola.github.io/assertj/
例如,您可以使用以下方法比较对象:
assertThat(payload).isEqualToComparingFieldByField(object);
您可以使用可以排除或包含指定字段的其他方法apis
答案 2 :(得分:0)
我使用它,发现它非常有用。
import static org.junit.jupiter.api.Assertions.assertAll;
assertAll(
() -> assertThat(actual1, is(expected)),
() -> assertThat(actual2, is(expected))
);