Как бороться с взаимозависимыми тестами JUnit? - PullRequest
2 голосов
/ 12 июля 2011

У меня вопрос по тестированию JUnit.

Наш пакет JUnit тестирует различные написанные нами функции, которые взаимодействуют с нашей системой памяти.

Способ, которым была спроектирована наша система, требует, чтобы она была статичной и, следовательно, инициализировалась до запуска испытаний.

Проблема, с которой мы сталкиваемся, заключается в том, что при запуске последующих тестов на них влияют тесты, предшествующие этому, поэтому возможно (и вероятно), что мы получаем ложноположительные или неточные сбои.

Есть ли способ поддержать порядок тестирования наших тестов JUnit, но сделать так, чтобы он заново инициализировал всю систему, как если бы тестирование проводилось с нуля.

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

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Я много раз видел проблемы с тестами, когда они зависели друг от друга (иногда намеренно!).

Во-первых, вам необходимо настроить метод настройки:

@Before
public void setUp() {
    super.setUp();
    // Now clear, reset, etc all your static data.
}

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

Порядок ваших тестов обычно соответствует порядку, который они имеют в классе теста.Но это никогда не следует предполагать, и основывать код на этом - действительно плохая идея.

Вернуться к документации .Если вам нужна дополнительная информация.

0 голосов
/ 13 июля 2011

Возможно, вы захотите взглянуть на TestNG , который поддерживает тестовые зависимости для этого вида функционального тестирования (JUnit является структурой модульного тестирования):

@Test
public void f1() {}

@Test(dependsOnMethods = "f1")
public void f2() {}
0 голосов
/ 12 июля 2011

Подход, который я использовал для решения этой проблемы, заключался в частичной повторной инициализации перед каждым тестом. Каждый тест знает предварительные условия, которые ему требуются, и настройка гарантирует, что они верны. Не уверен, будет ли это актуально для вас. Доверие к порядку часто приводит к тому, что PITA является продолжением - лучше проводить тесты самостоятельно.

Ах да - есть один «тест», который запускается как начало набора, отвечающего за статическую инициализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...