Применение аннотации @Ignore позволяет проигнорировать выполнение помеченного ею теста. Так же этой аннотацией можно пометить весь класс, содержащий тестовые методы, что приведет к игнорированию сразу всех тестов, расположенных в этом классе. Применение аннотации @Ignore главным образом осуществляется в процессе разработки и отладки тестовых или тестируемых классов, для пометки тестов которые не должны выполняться. Параметром аннотации можно указать причину пропуска теста. Пример:
@Ignore(“Тест ещё не реализован!!!”)
@Test
public void testFunct() {
// ???
}
Однако часто возникает ситуация когда необходимо принять решение выполнять или нет ряд тестов в зависимости от определенных условий, например, в зависимости от числа ядер процессора или операционной системы, под которой выполняются тесты. В таком случае необходимо использовать «предположения» (assumption), определенные в класс org.junit.Assume.
Неудачное предположение не означает ошибку в коде, а указывает на то, что тест не несет никакой смысловой нагрузки. Дефолтный раннер обрабатывает тесты с неудачным предположением как пропущенные. Для кастомного раннера поведение можно определить самому.
Пример применения «предположений» для запуска тестов только под «Виндой»:
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestSomethingOnlyForWindows {
@BeforeClass
public static void checkOs() throws Exception {
Assume.assumeTrue(System.getProperty("os.name").toLowerCase().contains("windows"));
}
@Test
public void someTest1() {…}
@Test
public void someTest2() {…}
…
}
Применение предположения в методе с аннотацией @BeforeClass (как в вышеописанном примере) позволяет пропустить все тесты, определенные в тестовом классе в случае, если это предположение не выполняется. Такой же результат можно получить, если использовать это же предположение в начале каждого теста.
Ниже представлен перечень доступных предположений (assume). Каждому предположению можно добавить первым параметром строку, которая будет использоваться в качестве параметра для AssumptionViolatedException при ошибочном предположении.
assumeTrue([String message], boolean b)
— Проверка на истинность логического утверждения.assumeFalse([String message], boolean b)
— Проверка на истинность логического утверждения, обратно assumeTrue.assumeNoException([String message], Throwable t)
— Предположение, что тест завершится нормально. Если метод вызывается и в качестве t передается выброшенное исключение, то тест игнорируется (обычно применяется в блоке catch конструкции try-catch и передается выброшенное исключение).assumeNotNull(Object... objects)
— Если вызывается с одним (или более) не нулевым объектом, то тест прерывается и игнорируется.assumeThat([String message], T actual, Matcher<T> matcher)
— Проверка, что actual удовлетворяет условию заданному matcher.