2

我正在尝试编写一个自定义 Runner,它只是按随机顺序进行测试。跑者:

public class TestClassRunnerForParameters extends BlockJUnit4ClassRunner {
    public TestClassRunnerForParameters(Class<?> type) throws Exception {
        super(type);
    }

    protected java.util.List<org.junit.runners.model.FrameworkMethod> computeTestMethods() {
        java.util.List<org.junit.runners.model.FrameworkMethod> methods = super
                .computeTestMethods();
        Collections.shuffle(methods);
        return methods;
    }
}

现在,如果它不是参数化测试,这可以正常工作。是否可以使用参数测试来做到这一点?实现参数化接口?

4

2 回答 2

1

我会说这个错误是非常自我描述的:

自定义运行器类 TestClassRunnerForParameters 应该有一个带有签名 TestClassRunnerForParameters(Class testClass) 的公共构造函数

您的类没有具有该签名的构造函数。它唯一的构造函数有参数Class<?> type,List<Object[]> parameterListint i. 您应该删除后两个参数。另外,该构造函数不是public;你应该public在它前面添加。

此外,如果您正在尝试构建参数化测试,您可能会在org.junit.runners.Parameterizedrunner 中进行测试,因为它正是这样做的。这是一个很好的教程

于 2013-04-12T13:22:18.333 回答
0

只需添加一个构造函数,(按照建议):

public TestClassRunnerForParameters(Class testClass) {
   ...
}

并让它委托给您的构造函数。您的构造函数应该public在这种情况下,因为 JUnit/Surefire 正在使用反射。

于 2013-04-12T13:20:42.063 回答