以编程方式生成 JUnit 4 测试

发布于 2024-10-20 18:08:39 字数 202 浏览 4 评论 0原文

我有一个 JUnit 4 测试,它创建测试数据并断言每个数据的测试条件。如果一切正确,我会得到绿色测试。

如果某一数据未通过测试,则整个测试的执行将被中断。我想对每个数据进行一个 JUnit 测试。是否可以以编程方式生成 JUnit 测试,以便我在 IDE 中获得大量测试?

采用这种方法的原因是为了更快地了解哪个测试失败,并在一个数据失败时继续剩余的测试。

I have a JUnit 4 test which creates test data and asserts the test condition for every single data. If everything is correct, I get a green test.

If one data fails the test, the execution of the whole test is interrupted. I would like to have a single JUnit test for each data. Is it possible to spawn JUnit tests programmatically, so that I get a lot of tests in my IDE?

The reason for this approach is to get a quicker overview which test fails and to continue the remaining tests, if one data fails.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丘比特射中我 2024-10-27 18:08:39

听起来您想要编写一个参数化测试(对不同的数据集进行完全相同的检查)。

有一个 Parameterized 类。此示例展示了如何使用它:

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
    }

    private final int input;
    private final int expected;

    public FibonacciTest(final int input, final int expected) {
        this.input = input;
        this. expected = expected;
    }

    @Test
    public void test() {
        assertEquals(expected, Fibonacci.compute(input));
    }
}                    

请注意,data() 方法返回要由 test() 方法使用的数据。该方法可以从任何地方获取数据(例如与测试源一起存储的数据文件)。

此外,没有什么可以阻止您在此类中使用多个 @Test 方法。这提供了一种对同一组参数执行不同测试的简单方法。

It sounds like you'd want to write a parameterized test (that does the exact same checks on different sets of data).

There's the Parameterized class for this. This example shows how it can be used:

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
    }

    private final int input;
    private final int expected;

    public FibonacciTest(final int input, final int expected) {
        this.input = input;
        this. expected = expected;
    }

    @Test
    public void test() {
        assertEquals(expected, Fibonacci.compute(input));
    }
}                    

Note that the data() method returns the data to be used by the test() method. That method could take the data from anywhere (say a data file stored with your test sources).

Also, there's nothing that stops you from having more than one @Test method in this class. This provides an easy way to execute different tests on the same set of parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文