Подтвердить что ты не робот

Параметрированные многоуровневые апартаменты

В настоящее время у меня есть абстрактный класс BaseTest, который содержит несколько общих @Test.

public abstract class BaseTest {

    private String expected;
    private String actual;

    public BaseTest(String expected, String actual) {
        this.expected = expected;
        this.actual = actual;
    }

    public String methodToTest(String line) {
        return line.trim();
    }

    @Test
    public void testNull() {
        assertNull(methodToTest(null));
    }

    // more @Tests...
}

SomeTest extends BaseTest, где я определяю различные тестовые примеры.

@RunWith(Parallelized.class)
public class SomeTest extends BaseTest {
    // @Parameters (test cases) goes here...
}

У меня много тестов, которые расширяют BaseTest, которые затем помещаются в Suite в RunAllTests.

@RunWith(Suite.class)
@SuiteClasses({ SomeTest.class, AnotherTest.class, etc... })
public class RunAllTests { }

Итак, скажем, я хочу добавить еще @Test, но я хочу скрыть их в другой класс.

public class WhitespaceTest extends BaseTest {

    public WhitespaceTest(String expected, String actual) {
        super(expected, actual);
    }

    @Test
    public void testNewline() {
        assertEquals(expected, methodToTest(actual + "\n"));
    }

    // more @Tests...
}

Кажется, мне нужен еще один "слой" Suites для запуска каждого отдельного теста, так что для каждого класса в RunAllTests я запускаю BaseTest И WhitespaceTest. Как я могу реализовать этот уровень?

4b9b3361

Ответ 1

Вот моя текущая (наивная) обходная проблема:

Внутри BaseTest:

@Test
public void testNewline() {
    WhitespaceTest wt = new WhitespaceTest(expected, actual);
    wt.testNewline();
}

Это работает, но есть много дубликатов кода. Для каждого @Test в WhitespaceTest вы должны создать еще один @Test в BaseTest.