将位于同一 class 中的测试分组

Grouping tests that are located in the same class

我正在准备面试,组织工作的方式是每个问题都有自己的问题 class。这很方便,因为我可以将问题陈述、实施和测试集中到一个地方,以便将来重新审视问题。但是,我一直在尝试找到一种方法,将测试用例分组到单个 class 中。如果我将测试和实现拆分为单独的 classes,我可以设置一个额外的测试套件 class,例如 this

就我而言,我有两种方法来检查井字棋盘是否完整。一种仅适用于 3 x 3 板,另一种适用于 N x N 板。我有一个测试它们的方法和很多 "basic" 测试:

    public void doTestBasic(char expected, char[][] board){
        assertThat("Only 3 by 3", expected, is(checkForWinner3By3(board)));
        assertThat("Generic", expected, is(checkForWinnerGeneric(board)));
    }

    @Test
    public void testSimpleRow(){
        char[][] board = {
                {'X','X', 'X'},
                {' ',' ', ' '},
                {' ',' ', ' '}};
        char expected = 'X';
        doTestBasic(expected, board);
    }

    @Test
    public void testSimpleCol(){
        char[][] board = {
                {'X',' ', ' '},
                {'X',' ', ' '},
                {'X',' ', ' '}};
        char expected = 'X';
        doTestBasic(expected, board);
    }

    @Test
    public void testBasicTie(){
        char[][] board = {
                {'X','O', 'O'},
                {'O','X', 'X'},
                {'O','X', 'O'}};
        char expected = 'N';
        doTestBasic(expected, board);
    }

然后我只对更大的电路板进行更多测试,例如:

    @Test
    public void testHigherEmpty(){
        char[][] board = {
                {' ',' ', ' ', ' '},
                {' ',' ', ' ', ' '},
                {' ',' ', ' ', ' '},
                {' ',' ', ' ', ' '}};

        char expected = 'N';
        assertEquals(expected, checkForWinnerGeneric(board));

    }


    @Test
    public void testHigherRow(){
        char[][] board = {
                {'X','X', 'X', 'X'},
                {' ',' ', ' ', ' '},
                {' ',' ', ' ', ' '},
                {' ',' ', ' ', ' '}};

        char expected = 'X';
        assertEquals(expected, checkForWinnerGeneric(board));

    }

我希望两种不同类型的测试在 运行 时出现在两个不同的组中,而不是一个长列表,同时留在一个 class 文件中解决问题。请注意,我使用的是 Java 8 和 JUnit4。

您可以在代表组的函数中调用您的测试:

@Test
public void simpleTests() {
    testSimpleRow();
    testSimpleCol();
    testBasicTie();
}

@Test
public void higgerTests() {
    testHigherRow();
    testHigherCol();
}

这样你就可以在一个更大的测试方法中执行彼此的方法。

不要忘记删除其他测试的 @Test 注释。