2013-02-25 2 views
0

Почему класс JUnit Suite в моих случаях называется TestSuite.class, а не выполняет собственные аннотации Test, Before и After? Он только exectutes свой собственный BeforeClass, AfterClass, а затем ВСЕ аннотации тестовых классов набора. Я доказал, что это так, создав тестовый проект вокруг этой теории: https://gist.github.com/djangofan/5033350Почему класс класса JUnit не выполняет собственные аннотации Test, Before и After?

Может ли кто-нибудь направить меня туда, где это объясняется? Мне нужно это понять.

ответ

1

Поскольку TestSuite не является самим тестом. Эти аннотации предназначены только для модульных тестов. См. Пример here.

public class FeatureTestSuite { 
    // the class remains empty <----- important for your question 
} 
+0

В этом случае мой тестовый набор аннотируется с помощью @Test, и поэтому в этом случае это тест, а также не просто простой набор тестов, а тестовый набор + тесты. – djangofan

+0

В документах JUnit это одно или другое, а не оба. –

+0

Можете ли вы предоставить ссылку на это? Я везде искал. Ничего, что я нашел, говорит, что у вас не может быть набора, который содержит свои собственные тесты. – djangofan

0

TestSuite - это способ идентификации группы тестов, к которой вы хотите применить какое-то общее поведение.

Возможно, лучше поясняется примером.

Так скажите, что вы делали некоторые базовые тесты CRUD в таблице заказов в базе данных MyDB. Каждому нужно, чтобы mydb был там, и таблица заказов существовала, поэтому вы помещаете их в набор. Он устанавливает db и таблицу, тесты запускаются, а затем до того, как пакет выходит из области действия, db отбрасывается, все хорошо и чисто для следующего тестового прогона. В противном случае вам придется делать это в каждом испытании, которое дорого, или, что еще хуже, имеют тестовые данные из предыдущих тестов, потому что другие отказываются часто, по-видимому, случайным образом, так как вы создали бы неявную зависимость между ними. Есть и другие способы достижения одного и того же, но они загромождают ваши тесты, и вы должны помнить, чтобы их называть.

Вам не нужно его проверять. Если это не будет выполнено, ни один из ваших тестов не будет выполнен.

+0

Я думаю, что приведенный мной пример полностью иллюстрирует это. – djangofan

0

Как и другие, это потому, что TestSuite не является Test. Это просто класс с аннотацией для группировки других тестов, так что его удобнее запускать.

Однако у него есть одно специальное свойство, и это исполнение @BeforeClass и @AfterClass. Они позволяют разрешить глобальную настройку/отключение пакета. Он не выполняет никаких тестов (включая @After, @Before или любые правила).