Кроме теорий (theory), в JUnit 4.4 появилась такая фича как Предположение (Assumption). Предположения позволяют указать условия, при которых должен выполняться тест-кейс. Если эти условия выполнения теста не соблюдаются, тест автоматически считается успешным.
Предположим есть набор тестов, среди которых есть тесты, для выполнения которых необходимо существование некоторого окружения – например необходимо протестировать EJB-компоненты, которые могут работать только в EJB-контейнере, а запускать тест мы хотим из своей любимой среды разработки и при этом мы не хотим, что бы эти тесты провалились из-за какого-нибудь тайм-аута. В идеале нужно чтобы эти тесты помечались как пропущенные.
Ниже представлен тест-кейс без использовани предположений. Все методы помеченные аннотацией @Test буду выполняться каждый раз при запуске теста и метод testEBJ будет отнимать значительное время. Можно было бы пометить этот метод аннотацией @Ignore, но тогда бы пришлось ее удалять каждый раз, когда тест будет запускаться в тестовой среде.
public class TestWithoutAssumption { @Test public void testEJB() { // call to EJB goes here } @Test public void testA() { // test class A } @Test public void testB() { // test class B } }
Перепишем данный тест с использованием допущений:
public class TestWithAssumption { public boolean isTestEnvironment() { // logic to test environment detection } @Test public void testEJB() { assumeTrue(isTestEnvironment()) // call to EJB goes here } @Test public void testA() { // test class A } @Test public void testB() { // test class B } }
В таком виде тест testEJB будет выполняться только в том случае, если запускается в тестовой среде. Остальные тесты будут запускаться каждый раз.