在参数化测试类中排除非参数测试

2022-08-31 14:48:44

JUnit 中是否有任何注释来排除参数化测试类中的非参数测试?


答案 1

JUnit 5

从 Junit 5.0.0 开始,您现在可以使用 来注释测试方法。所以不需要内部类。除了 ValueSource 之外,还有很多方法可以为参数化测试提供参数,如下所示。有关详细信息,请参阅官方 junit 用户指南@ParameterizedTest

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class ComponentTest {

    @ParameterizedTest
    @ValueSource(strings = { "racecar", "radar", "able was I ere I saw elba" })
    public void testCaseUsingParams(String candidate) throws Exception {
    }

    @Test
    public void testCaseWithoutParams() throws Exception {
    }
}

JUnit 4

如果您仍在使用 Junit 4(我使用 v4.8.2 进行了测试),则可以将封闭式运行器与内部类和参数化运行器结合使用:

import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Enclosed.class)
public class ComponentTest {

    @RunWith(Parameterized.class)
    public static class ComponentParamTests {

        @Parameters
        ...

        @Test
        public void testCaseUsingParams() throws Exception {
        }
    }

    public static class ComponentSingleTests {

        @Test
        public void testCaseWithoutParams() throws Exception {
        }
    }
}

答案 2

不。最佳做法是将这些非参数化测试移动到其他类(.java文件)


推荐