如何使用junit从单个方法运行不同的测试

时间:2015-11-03 21:24:53

标签: java junit

我有一个测试,它执行一个循环来运行相同的测试,但输入不同。问题是,当一个断言失败时,测试就会停止,并且标记为一个测试失败。

以下是代码:

@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作为两个不同的测试执行,但在其中,我会循环检查集合返回的每个项目上的一些内容。但我想要的是对每个项目进行测试,将其作为一个不同的项目进行处理,以便如果一个项目失败,其他项目继续执行,我可以看到哪个项目失败了,有多少项目失败了。

1 个答案:

答案 0 :(得分:1)

您所描述的是参数化测试。有很多框架可以帮助你。它们只是具有不同的简单功率比。选择一个符合您需求的产品。

junit的本地方式是@Parameterized,但它非常详细。您可能会觉得有用的其他junit插件有zohhakjunit-dataprovider。如果您未被强制使用junit和/或普通java,则可以尝试spocktestng