代码之家  ›  专栏  ›  技术社区  ›  Bart van Heukelom

循环遍历数组,每个元素一个JUnit测试

  •  16
  • Bart van Heukelom  · 技术社区  · 15 年前

    我有一个JUnit4测试,它循环遍历一组测试数据:

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

    因为它是一个测试方法,所以一旦数组中的一个元素失败,整个测试就会停止。有没有办法,不用为每个测试项目制定方法? 也许是有反射的东西?

    2 回复  |  直到 15 年前
        2
  •  4
  •   khachik    15 年前

    抓住 AssertionError 并将捕获的错误添加到错误列表中,在最后检查列表是否为空并引发一个复合 断言错误 如果没有。