getRequests() 必须 return 一个可迭代的数组

getRequests() must return an Iterable of arrays

我的代码:

@RunWith(Parameterized.class)                                                                              
public class FreshResultCompareRunner2 {                                                                   


    //This is called before @BeforeClass !                                                                 
    @Parameterized.Parameters                                                                              
    public static Collection getRequests() throws IOException {                                            
        injector = Guice.createInjector(new MainModule());                                                 
        initStaticFromInjector();                                                                          
        initTestInput();                                                                                   
        return OrganizeTestParameterizedInput();                                                           
    }                                                                                                      


    private static void initTestInput() throws IOException {                                               

    }                                                                                                      

    private static Collection OrganizeTestParameterizedInput() {                                           

        Object[] objectMatrix = new Object[100];                                                
        for (int i = 0; i < 100; i++) {                                                         
            objectMatrix[i] = i;                                                                           
        }                                                                                                  
        return Arrays.asList(objectMatrix);                                                                
    }                                                                                                      

returns以下异常:

getRequests() must return an Iterable of arrays

如何 运行 参数化的 junit 增加 int 仅作为输入参数?

i=0 ...100 说 运行 相同的测试 ?

更新

我试过了

//This is called before @BeforeClass !
@Parameterized.Parameters
public static Collection<int[]> getParameters() {
    injector = Guice.createInjector(new MainModule());
    initStaticFromInjector();

    int numOfChunks = 3;//routingResponseShortRepository.getNumOfBaseLineChunks();
    //might be less
    int totalResponses = numOfChunks * globalSettings.requestsChunkSize;

    Collection<int[]> params = new ArrayList<>(totalResponses);
    for(int i = 1; i <= totalResponses; ++i) {
        params.add(new int[] { i });
    }
    return params;
}

//takes the next matrix row from OrganizeTestParameterizedInput()
public FreshResultCompareRunner2(int responseId) {
    this.responseId = responseId;
}

仍然出现错误:

java.lang.Exception: com.waze.routing.automation.runners.FreshResultCompareRunner2.getParameters() must return an Iterable of arrays.
    at org.junit.runners.Parameterized.parametersMethodReturnedWrongType(Parameterized.java:343)

对于参数化测试,JUnit 将测试参数传递给测试的构造函数 class。因为构造函数可以采用多个参数,所以 JUnit 期望每个参数集都是一个数组。数组的元素必须符合构造函数参数。

因此您的配置方法必须 return 一个 Iterable 数组,例如Collection<Object[]>。在您的情况下,每个 运行 只有一个参数,因此您的数组长度为 1:

@Parameterized.Parameters                                                                              
public static Collection<Object[]> getParameters() {                                            
    Collection<Object[]> params = new ArrayList<>(100);
    for(int i = 1; i <= 100; ++i) {
        params.add(new Object[] { i });
    }
    return params;
}     

另请注意,您的配置方法不应像您的方法看起来那样进行任何初始化!初始化仅在 @Before@BeforeClass!

中完成

Junit 4.12+ 没有这个限制了。因此,如果您使用 JUnit 4.12+ 开发测试,然后使用 4.11- 执行这些测试,您也会收到此错误消息。

有关详细信息,请参阅 JUnit 4.12 release notes