我有一个测试,它执行一个循环来运行相同的测试,但输入不同。问题是,当一个断言失败时,测试就会停止,并且标记为一个测试失败。
以下是代码:
@Test
public void test1() throws JsonProcessingException {
this.bookingsTest(Product.ONE);
}
@Test
public void test2() throws JsonProcessingException {
this.bookingsTest(Product.TWO);
}
public <B extends Sale> void bookingsTest(Product product) {
List<Booking> bookings = this.prodConnector.getBookings(product, 100);
bookings.stream().map(Booking::getBookingId).forEach((bookingId) -> {
this.bookingTest(bookingId);
});
}
public <B extends Sale> void bookingTest(String bookingId) {
...
// Do some assert:
Assert.assertEquals("XXX", "XXX");
}
在这种情况下,方法test1和test2作为两个不同的测试执行,但在其中,我会循环检查集合返回的每个项目上的一些内容。但我想要的是对每个项目进行测试,将其作为一个不同的项目进行处理,以便如果一个项目失败,其他项目继续执行,我可以看到哪个项目失败了,有多少项目失败了。
答案 0 :(得分:1)
您所描述的是参数化测试。有很多框架可以帮助你。它们只是具有不同的简单功率比。选择一个符合您需求的产品。
junit的本地方式是@Parameterized,但它非常详细。您可能会觉得有用的其他junit插件有zohhak或junit-dataprovider。如果您未被强制使用junit和/或普通java,则可以尝试spock或testng。