Check#
Модуль, который предоставляет гибкую функциональность для assert-действий с использованием матчеров.
<dependency>
<groupId>ru.tinkoff.qa.neptune</groupId>
<artifactId>check</artifactId>
<version>${LATEST_RELEASE_OR_BETA_VERSION}</version>
<scope>test</scope>
</dependency>
<!--Минимально необходимый набор зависимостей от hamcrest-->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>${artefact.name.from.hamcrest.group}</artifactId>
<version>${actual.hamcrest.version}</version>
<scope>test</scope>
</dependency>
dependencies {
testImplementation group: 'ru.tinkoff.qa.neptune', name: 'check', version: LATEST_RELEASE_OR_BETA_VERSION
testImplementation group: 'org.hamcrest', name: 'artefact.name.from.hamcrest.group', version: 'actual.hamcrest.version'
}
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
public class MyTest {
@Test
public void tezt() {
int number; //= алгоритм и действия, чтобы получить число
check(number, match(greaterThan(0)));
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Число, которое было получено",
number,
match(greaterThan(0)));
}
}
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
public class MyTest {
@Test
public void tezt() {
int number; //= алгоритм и действия, чтобы получить число
check(number,
match(greaterThan(0)),
match(lessThan(1000))); //Работает по принципу soft assert
//т.е. будут проведены ВСЕ перечисленные выше проверки.
//Если какие-то проверки не были успешными, тогда
//в логе/отчете будут выведены неуспешные проверки по отдельности,
//в самом конце выполнения метод check выбросит AssertError, в сообщении
//которого будет агрегированная информация о всех неуспешных проверках
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Число, которое было получено",
number,
match(greaterThan(0)),
match(lessThan(1000)));
}
}
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
import static ru.tinkoff.qa.neptune.check.MatchAction.matchAny;
public class MyTest {
@Test
public void tezt() {
int number; //= алгоритм и действия, чтобы получить число
check(number,
match(greaterThan(0)),
//перечисляются 2 и более критерия.
//Проверяемые значения должны соответствовать любому/любым из них
matchAny(lessThan(1000), greaterThanOrEqualTo(200)));
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Число, которое было получено",
number,
match(greaterThan(0)),
matchAny(lessThan(1000), greaterThanOrEqualTo(200)));
}
}
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
import static ru.tinkoff.qa.neptune.check.MatchAction.matchNot;
public class MyTest {
@Test
public void tezt() {
int number; //= алгоритм и действия, чтобы получить число
check(number,
match(greaterThan(0)),
//перечисляются 1 и более критерия.
// Проверяемые значения не должны соответствовать ни одному из них
matchNot(lessThan(1000)));
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Число, которое было получено",
number,
match(greaterThan(0)),
matchNot(lessThan(1000)));
}
}
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
import static ru.tinkoff.qa.neptune.check.MatchAction.matchOnlyOne;
public class MyTest {
@Test
public void tezt() {
int number; //= алгоритм и действия, чтобы получить число
check(number,
match(greaterThan(0)),
//перечисляются 2 и более критерия.
// Проверяемые значения должны соответствовать только одному из них
matchOnlyOne(lessThan(1000)), greaterThan(100));
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Число, которое было получено",
number,
match(greaterThan(0)),
matchOnlyOne(lessThan(1000)), greaterThan(100));
}
}
Иногда бывает так, что объект обладает некими мутабельными свойствами, значения которых меняются асинхронно спустя некоторое время
import static java.time.Duration.ofSeconds;
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
public class MyTest {
@Test
public void tezt() {
T obj; //= инициализация
check(obj, match(ofSeconds(5), matcher)); //указывается время,
// за которое проверка должна завершиться успешно
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Проверяемый объект",
obj,
match(ofSeconds(5), matcher));
//аналогично для matchAny, matchNot, matchOnlyOne
}
}
import static java.time.Duration.ofSeconds;
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.check;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
public class MyTest {
@Test
public void tezt() {
Integer number; //= алгоритм и действия, чтобы получить число
check(number,
match(greaterThan(0)),
match("Квадратный корень", //пояснение, ЧТО проверяется
number -> sqrt(number.doubleValue()), //функция для получения
//проверяемой производной величины
greaterThan(2D))); //матчер
//пример с пояснением. Оно должно описывать, ЧТО проверяется
check("Число, которое было получено",
number,
match(greaterThan(0)),
match("Квадратный корень", //пояснение, ЧТО проверяется
number -> sqrt(number.doubleValue()), //функция для получения
//проверяемой производной величины
greaterThan(2D))); //матчер
//пример для кейса, когда нужно указать время
Object obj; //= инициализация
check("Проверяемый объект",
obj,
match("Какое-то вычислимое свойство",
o -> o.returnSomething(),
//указывается время,
ofSeconds(5), // за которое проверка
//должна завершиться успешно
matcher)); //матчер
//аналогично для matchAny, matchNot, matchOnlyOne
}
}
import static org.hamcrest.Matchers.*;
import static ru.tinkoff.qa.neptune.check.CheckActionSupplier.evaluateAndCheck;
import static ru.tinkoff.qa.neptune.check.MatchAction.match;
public class MyTest {
@Test
public void tezt() {
//Данная фича нужна скорее для красоты лога/отчета.
//Шаг с проверкой скрывает внутри себя под-шаги,
//часть из которых - вычисление проверяемого значения,
//остальные - проверки
evaluateAndCheck("Полученное число", () -> {
//алгоритм и действия, чтобы получить число
return number;
},
match(greaterThan(0)),
match(lessThan(1000)));
}
}