Java Junit 重复重复(或重复的嵌套)测试?

Java Junit repeat a repeating (or nest of repeating) test?

提问人:Anatoly 提问时间:5/22/2023 更新时间:5/24/2023 访问量:61

问:

测试以多维方式重复,是否可以简单地实现如下层次结构?我希望 UI,例如 VSC 测试 UI 显示子测试的嵌套

class Test {
    @RepeatedTest(...)
    class ChildTest {
        RepetitionInfo info = ...

        @RepeatedTest(...)
        public void test() {
            RepetitionInfo info2 = ...
            System.out.printf(..., info1.getCurrentRepetition(), info2.getCurrentRepetition());

            // Idea:

            // 0 - 0
            // 0 - 1
            // 0 - 2
            // ...

            // 1 - 0
            // 1 - 1
            // 1 - 2
            // ...
        }
    }
}
Java 嵌套 junit5

评论

0赞 markspace 5/22/2023
单元测试的一般规则是每个测试测试一个关于代码的假设。像这样的大循环似乎违反了该规则。你能把测试归结为一个假设吗?
0赞 Anatoly 5/23/2023
有很多测试用例,尤其是组合测试用例:有质数,也有单个数。这个想法是写一个素数和数字的“组合器”。(希望将层次结构保留在 vsc 的本机测试资源管理器 ui 中)

答:

0赞 Emanuel Trandafir 5/24/2023 #1

您可以尝试使用 Junit5 的注解。这将允许一组测试的通用设置,并且它还将在 IDE 中很好地显示测试报告。您可以像这样使用它:@Nested

class Test {
    // RepetitionInfo info1 = ... // will be available for all

    @Nested
    @RepeatedTest(...)
    class ChildTest {
        RepetitionInfo info2 = ... // will be available for this class only

        @RepeatedTest(...)
        public void test() {
           ... // you can use info1 + info2 here
        }
        @RepeatedTest(...)
        public void test2() {
           ... // you can use info1 + info2 here
        }
    }

    @Nested
    @RepeatedTest(...)
    class ChildTest3 {
        RepetitionInfo info3 = ... // will be available for this class only
        // ... // you can use info1 + info3
    }
}

如果这是您需要的东西,您可以在此处阅读更多相关信息:https://www.baeldung.com/junit-5-nested-test-classes

评论

0赞 Anatoly 5/24/2023
这对我不起作用,你有什么版本的junit和java?
0赞 Emanuel Trandafir 5/24/2023
junit5 中。错误是什么?以下是官方文档: junit.org/junit5/docs/current/user-guide/#writing-tests-nested 此外,在 Baeldung 文章中,您会找到指向源代码的链接