Кроме теорий (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 будет выполняться только в том случае, если запускается в тестовой среде. Остальные тесты будут запускаться каждый раз.