2009-10-29 3 views
8

У нас есть много интеграционных тестов, написанных с использованием JUnit , хотя теперь мы запускаем их с помощью 4.4. Некоторые из них нуждаются в методе tearDown, который запускается после завершения всех тестов в классе (для освобождения некоторых общих ресурсов).Срыв класса в junit 3?

Я вижу, что это можно сделать в junit 4 с @AfterClass (org.junit). Тем не менее, смешивание этого с существующими junit 3 тестами, которые расширяют TestCase (junit.framework. *), Похоже, не работает. [Кстати, есть ли еще инструмент миграции? Вопрос 264680 указал, что его не было год назад.]

Я видел упоминание об использовании junit.extensions.TestSetup для такого рода вещей. Мое краткое тестирование этого не показалось рабочим. Любые примеры?

+0

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

ответ

18

Нашел ответ на мой вопрос :) Я пробовал это кратко, прежде чем публиковать свой вопрос, но он не работал для меня. Но теперь я понимаю, что это связано с тем, что наша тестовая среда вызывает junit иначе, чем по умолчанию, поэтому он не вызывал метод «suite», который необходим в следующем решении. В Eclipse, если я использую связанный junit runner для непосредственного выполнения одного Test/TestCase, он работает нормально.

Способ выполнения этой настройки/разрыва один раз в классе в junit 3 заключается в использовании TestSuite. Вот пример на junit.org:

Is there a way to make setUp() run only once?

public static Test suite() { 
    return new TestSetup(new TestSuite(YourTestClass.class)) { 

     protected void setUp() throws Exception { 
      System.out.println(" Global setUp "); 
     } 
     protected void tearDown() throws Exception { 
      System.out.println(" Global tearDown "); 
     } 
    }; 
} 
+0

Вы запустили это на Android? У меня точно такой же код, но я получаю исключение ClassNotFound. Вы уже столкнулись с этим? Неужели YourTestClass расширяет TestCase? –

+0

Теперь я могу выполнить свой тест с помощью этого кода, но, похоже, метод suite() не вызывается. Что вы сделали, чтобы сделать такой призыв к этому методу? Я бы это вызвал автоматически –

+0

@FelipeMosso, если вы сообщите JUnit (или вашей IDE), чтобы запустить один тестовый класс в стиле JUnit3, и этот класс имеет открытый статический метод 'suite()', который возвращает 'Test' (или подкласс теста), тогда метод 'suite()' будет вызываться для создания пакета. Но если вы сами вручную создаете сюиты, вам нужно убедиться, что используется метод suite() (возможно, с помощью конструктора 'TestSuite', который принимает класс) – NamshubWriter

3

В JUnit 4 ваш тестовый класс не должен распространяться TestCase. Вместо этого вы должны убедиться, что имя вашего тестового класса соответствует *Test, и каждый метод тестирования аннотируется с помощью @Test. Пробовали ли вы эти изменения, а затем добавили аннотацию @AfterClass к соответствующему методу?

Подписаны аннотации к замене большинства/всех функциональных возможностей, которые вы в настоящее время используете от TestCase.

+0

Параллельно с попыткой получить всплеск в классе, я также пытаюсь просто преобразовать один класс в junit 4 аннотации. Не имея еще большой удачи, поскольку Eclipse/command-line тогда думает, что у меня нет тестов, которые нужно запустить. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^