Как я могу указать зависимости теста JUnit? - программирование
Подтвердить что ты не робот

Как я могу указать зависимости теста JUnit?

Наш инструментарий имеет более 15000 JUnit тестов, и многие тесты, как известно, терпят неудачу, если какой-либо другой тест выходит из строя. Например, если метод X.foo() использует функциональные возможности из Y.bar() и YTest.testBar(), то XTest.testFoo() не будет работать. Очевидно, что XTest.testFoo() также может завершиться ошибкой из-за проблем, специфичных для X.foo().

Пока это нормально, и я все же хочу, чтобы оба теста выполнялись, было бы неплохо, если бы можно было аннотировать зависимость теста от XTest.testFoo(), указывающую на YTest.testBar(). Таким образом, можно сразу увидеть, какая функциональность, используемая X.foo(), также терпит неудачу, а что нет.

Имеется ли такая аннотация в JUnit или в другом месте? Что-то вроде:

public XTest {

  @Test
  @DependsOn(method=org.example.tests.YTest#testBar)
  public void testFoo() {
     // Assert.something();
  }

}
4b9b3361

Ответ 1

JExample и TestNG есть что-то как это.

Я не знаю, насколько это полезно, но если вы попробуете, пожалуйста, вернитесь, чтобы сообщить нам, полезно ли это.

Ответ 3

Вы можете объявить тестовые зависимости в TestNG, синтаксис почти такой же, как в вашем примере. Я не думаю, что JUnit предлагает нечто подобное.

Ответ 4

org.junit.FixMethodOrder

@FixMethodOrder (MethodSorters.NAME_ASCENDING) Это относится к классу Unit test.

Вы можете назвать свои методы public void step1_methodName и т.д.

Ответ 5

На самом деле это не так, что я знаю. (Edit: вы узнаете что-то новое каждый день:)) На мой взгляд, это не так уж плохо (хотя я вижу, что это полезно, особенно когда JUnit используется для других форм автоматических тестов - например, интеграционных тестов). Ваши тесты, IMO, не в строгом смысле слова "модульные тесты" (по крайней мере, не тест для X#foo()). Тесты для X#foo() должны преуспеть или сбой в зависимости от реализации X#foo(). Он не должен зависеть от Y#foo().

То, что я сделал бы в вашей должности, - это издеваться над Y и реализовать что-то вроде MockY#foo() с очень простым управляемым поведением и использовать его в тестах X#foo().

Тем не менее, с 15 000 тестов я вижу, как это будет болью для рефакторинга.:)

Ответ 6

В конструкция, управляемая поведением библиотека jBehave есть ключевое слово GivenScenarios, которое импортирует список сценариев, которые запускаются до основного сценария. Это дает возможность определять зависимости и иметь одну точку отказа. jBehave ведение журнала скажет вам, если тест не выполняется в зависимостях или разделе основного тела.