2015-04-29 8 views
3

моего кода:GetRequests() должен возвращать Iterable массивов

@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);                 
    }                          

возвращает следующее исключение:

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) 

ответ

3

Для параметризованных тестов JUnit прошли тестовые параметры в конструктор класса теста , Поскольку конструктор может принимать более одного аргумента, JUnit ожидает, что каждый параметр будет массивом. Элементы массива должны соответствовать аргументам конструктора.

Таким образом, ваш метод конфигурации должен возвращать 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!

+0

см. Мое обновление. он все еще не работает. –

+0

@EladBenda ОК, я закодировал это из памяти - возможно, возвращенная коллекция должна быть типа 'Collection '. Я проверю это. – isnot2bad

+0

@EladBenda Исправлен код. Набор параметров должен быть типа 'Object []'. – isnot2bad

5

Junit 4.12+ не имеет этих ограничений больше. Поэтому, если вы разрабатываете свои тесты с помощью JUnit 4.12+, а затем выполняете эти тесты с помощью 4.11, вы также получите это сообщение об ошибке.

Для получения более подробной информации см. JUnit 4.12 release notes.

+0

Спасибо, это была моя точка зрения. Я заменил junit-4.11.jar на junit-4.12.jar в моей папке groovy -> lib, и мои параметризованные тесты работали, как ожидалось. – rplantiko

+0

Отличный ответ. Я получил этот код от коллеги, у которого все работает нормально, поэтому я был немного удивлен, когда получил ошибку –

+0

OMG. Я шел по этой стене. Мой POM говорит Junit 4.11. Исправлено! –