2010-11-22 3 views
14

У меня есть JUnit 4 теста, что петли через массив тестовых данных:петли через массив, каждый элемент тест JUnit

public @Test void testAll() { 

    final Object[][] sets = new Object[][] { 
      // SET        TYPE VALUE 

      // --- valid sets 

      // groups 
      x(s(A,1, B,1, C,1),     G), 
      x(s(A,4, B,4, D,4),     G), 
      x(s(A,8, B,8, D,8, C,8),   G), 
      x(s(J,J, B,4, D,4),     G, 4*3), 
      x(s(A,9, J,J, D,9),     G, 9*3), 
      x(s(A,2, B,2, C,2),     G), 
      x(s(A,4, B,4, J,J),     G, 4*3), 
      x(s(A,4, B,4, C,4, D,4),   G), 

      // runs 
      x(s(A,1, A,2, A,3),     R), 
      x(s(B,8, B,9, B,10),    R), 
      x(s(J,J, C,2, C,3),     R, 6), 
      x(s(D,8, D,9, J,J, D,11),   R, 38), 
      x(s(D,8, D,9, J,J, J,J),   R, 38), 

      // sames 
      x(s(A,1, A,1),      S), 
      x(s(B,4, B,4, B,4),     S), 
      x(s(C,8, C,8),      S), 
      x(s(D,3, D,3),      S), 

      // doubt-cases, assume group (TODO: verify this is correct) 
      x(s(J,J, J,J, D,4),     G, 4*3), 
      x(s(A,7, J,J, J,J),     G, 7*3), 
      x(s(J,J, D,9, J,J),     G, 9*3), 
      x(s(J,J, J,J, J,J),     G, 1), 

      // --- invalid sets 
      x(s(B,1, A,2, A,3),     I), // not same colour 
      x(s(D,11, D,12, J,J, J,J),   I), // last joker is 14 
      x(s(B,1, B,1, A,1),     I), // duplicate B1 
      x(s(A,1, A,2, A,3, A,5),   I), // gap A4 
      x(s(J,J, A,1, J,J, B,1, C,1),  I), // one J replaces D1, then nothing left to replace 
      x(s(A,1, A,2),      I), // short 
      x(s(B,1),       I), // shorter 
      x(s(A,5, A,6),      I), // short 
    }; 

    for (Object[] o : sets) { 

     TileSet s = (TileSet) o[0]; 
     Type t = (Type) o[1]; 
     int v = (Integer) o[2]; 

     System.out.println(s); 

     assertEquals(t, s.getType()); 
     assertEquals(v, s.getValue()); 

     // test isValid, though it's Too Simple To Break(R) 
     if (t == Type.INVALID) assertFalse(s.isValid()); 
     else assertTrue(s.isValid()); 
    } 

} 

Потому что это все в одном методе испытаний, все тесты прекращаются, как только один элемент в массиве терпит неудачу. Есть ли способ обойти это без создания метода для каждого тестового элемента? Может быть что-то с отражением?

+1

Если вам это нужно продолжать через утверждать неудачи, как о строительстве вверх по списку элементов, которые терпят неудачу, когда вы зацикливаете, а затем утверждаете, что список пуст после цикла? Если он не пуст, распечатайте список сбоев. – birryree 2010-11-22 16:58:13

+0

@birryree как бы вы это сделали? не будет ли цикл останавливаться после того, как элемент завершится неудачей? Я начинающий кстати. – papercuts 2013-03-05 10:08:45

ответ

21

Используйте JUnit 4's parameterized tests. Они идеально подходят для такого типа проблем, хотя документации недостаточно.

Вот несколько других образцов о том, как использовать их .:

3

уловить AssertionError и добавить пойманную ошибку в список ошибок, в конце проверить, что список пуст, поднять состав AssertionError, если нет.

+0

Список ошибок? Это только список, который мне нужно будет сделать, или встроенная вещь JUnit? – 2010-11-22 16:57:52

Смежные вопросы