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

Как повторно использовать существующие тесты JUnit в другом тестовом классе?

как я могу повторно использовать тесты JUnit в другом тестовом классе?

Например:

public TestClass1 {
    @Test
    public void testSomething(){...}
}

public TestClass2 {
    @Test
    public void testSomethingAndSomethingElse() {
        // Somehow execute testSomething()
        // and then test something else
    }
}
4b9b3361

Ответ 1

Как обычно, вы можете:

  • Расширяет TestClass2 от TestClass1
  • Доступ TestClass1 из TestClass2 с помощью делегирования:

Пример 1:

// Instantiate TestClass1 inside test method
public TestClass2 {
    public void testSomethingAndSomethingElse1() {
         new TestClass1().testSomething();
    }
}

Пример 2:

// Instantiate TestClass1 as a member of TestClass2
public TestClass2 {
    private TestClass1 one = new TestClass1();
    public void testSomethingAndSomethingElse1() {
         one.testSomething();
    }
}

Ответ 2

Избегайте сценария, в общем. Он подвержен испытаниям гораздо более хрупким. Если TestClass1 терпит неудачу, то TestClass2 неявно выходит из строя, что нежелательно по крайней мере по следующим причинам:

  • Код тестируется несколько раз, что отнимает время выполнения.
  • Тесты не должны полагаться друг на друга, они должны быть как можно более развязаны
  • Если это становится шаблоном, становится труднее определить, какая часть кода нарушена, посмотрев, какие тесты терпят неудачу, что является частью точки тестов.

Иногда разделение разделов тестового кода полезно, особенно для интеграционных тестов. Здесь вы можете сделать это, не в зависимости от самих тестов:

public abstract BaseTests {

    protected void somethingHelper() {
        // Test something
    }
}

public TestClass1 extends BaseTests {
    @Test
    public void testSomething(){
        somethingHelper();
    }
}

public TestClass2 extends BaseTests {
    @Test
    public void testSomethingAndSomethingElse() {
        somethingHelper();
        // and then test something else
    }
}

В качестве альтернативы вы можете использовать вспомогательный класс и вообще избегать наследования. Утверждения и т.п. Могут идти по методу somethingHelper().

Не вызывайте метод из TestClass1 в TestClass2 напрямую. Эти тестовые примеры становятся менее читабельными и могут приводить к spaghetti frittata.

Ответ 3

Логически, нет причин для вызова одного метода тестирования из другого. Любой инструмент, который запускает один тест, будет также легко выполнять все тесты в пакете. Но если вам нужно, вы бы назвали его как любой другой метод в любом другом классе.

То, что вы, скорее всего, захотите сделать, это выполнить некоторые общие настройки для обоих методов тестирования. Вы можете поместить код that в метод утилиты в общий класс и вызвать общий код в обоих тестах.