如何在多个参数化测试中重用JUnit Jupiter @MethodSource

时间:2019-08-23 15:21:13

标签: java selenium junit5

假设我有以下代码:

class Testing {

    String[] text() {
        String[] text = { "A", "B" };
        return text;

    }

    @Nested
    class NestedTesting {

        @ParameterizedTest
        @MethodSource("text")
        void A(String text) {

            System.out.println(text);

        }

        @ParameterizedTest
        @MethodSource("text")
        void B(String text) {

            System.out.println(text);

        }
    }
}

运行此命令时,我得到:

No tests found with test runner 'JUnit 5'.

我该如何使用它?我是Java的初学者,所以我可能会忘记一些明显的东西

1 个答案:

答案 0 :(得分:7)

最简单的方法是通过其完全限定的方法名称(例如static)引用@MethodSource("example.Testing#text()")工厂方法。

为进一步简化问题,您可以引入自定义的组成的注释,该注释将@ParameterizedTest@MethodSource的配置组合如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ParameterizedTest
@MethodSource("example.Testing#text()")
public @interface ParameterizedTextTest {
}

然后您可以像这样重复使用它:

package example;

import org.junit.jupiter.api.Nested;

class Testing {

    static String[] text() {
        return new String[] { "A", "B" };
    }

    @Nested
    class NestedTesting {

        @ParameterizedTextTest
        void testA(String text) {
            System.out.println(text);
        }

        @ParameterizedTextTest
        void testB(String text) {
            System.out.println(text);
        }
    }
}

测试愉快!