2013-05-30 6 views
1

Сегодня я столкнулся с собственным беспорядком: некоторые гигабайты временных тестовых данных в временных папках, созданных JUnit TemporaryFolder s, которые не были очищены.Как обеспечить, чтобы JUnit @Before сопровождал @After

Похоже, что если ваш тест не имеет метода @After, то @Rule s не являются after() ed.

Есть ли способ, чтобы гарантировать (programmatorically), что тест с помощью метода @Before также имеет по меньшей мере, один@After метод тоже?

ответ

0

Вы можете просмотреть все тестовые файлы и изучить содержимое, чтобы убедиться, что это @Before присутствует, а затем @After. Я делаю это довольно много, и я нахожу, что он работает достаточно быстро, чтобы включить его в единый набор тестов.

Конечно, это не докажет, что вы поступаете правильно в своем методе @After.

Нечто подобное должно вам начать

for (File file : new File(yourTestDirectory).listFiles()) { 
    for (String contents : Files.toString(file, Charset.defaultCharset())) { 
    if(contents.contains("@Before")){ 
     if(!contents.contains("@After"){ 
     fail("must have @Before and @After"); 
     } 
    } 
    } 
} 
4

Наличие отсутствия @After метода не оказывает никакого влияния на правила JUnit. В общем, @After используется значительно реже, чем @Before в тестах JUnit. Если правило TemporaryFolder не очистилось, возможно, это не удалось, удалив файлы, например, из-за проблемы с разрешением файла. Как вы можете узнать из исходного кода TemporaryFolder, вы не получите ошибку или предупреждение в таком случае (возвращаемое значение File.delete не используется). Другая возможность заключается в том, что JVM разбилась или была прекращена стороной, контролирующей выполнение теста (IDE, инструмент сборки, сервер CI).

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