首页 > 代码库 > must return an Iterable of arrays.(junit4)

must return an Iterable of arrays.(junit4)

 

java.lang.Exception: TestIterator.init() must return an Iterable of arrays.    at org.junit.runners.Parameterized.parametersMethodReturnedWrongType(Parameterized.java:343)    at org.junit.runners.Parameterized.createRunnersForParameters(Parameterized.java:326)    at org.junit.runners.Parameterized.<init>(Parameterized.java:282)    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)    at java.lang.reflect.Constructor.newInstance(Unknown Source)    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

 

Error Cause:

使用@Parameters修饰的方法,返回值应该为Collection<T[]>

如果使用return Arrays.asList(parameters);则parameters应该为二维数组。
第一维描述参数组数,即有测试多少次
第二维描述参数个数,即执行一次测试,需要向构造函数传递多少个参数

source code:
org.junit.runners.Parameterized.java:

    private void createRunnersForParameters(Iterable<Object[]> allParameters,            String namePattern) throws InitializationError, Exception {        try {            int i = 0;            for (Object[] parametersOfSingleTest : allParameters) {                String name = nameFor(namePattern, i, parametersOfSingleTest);                TestClassRunnerForParameters runner = new TestClassRunnerForParameters(                        getTestClass().getJavaClass(), parametersOfSingleTest,                        name);                runners.add(runner);                ++i;            }        } catch (ClassCastException e) {            throw parametersMethodReturnedWrongType();        }    }

 

must return an Iterable of arrays.(junit4)