JUnit
это дляПлатформа с открытым исходным кодом для написания и запуска модульных тестов для программ Java.。
Он предоставляет набор аннотаций и методов утверждения, а также средство запуска тестов для выполнения тестов. Используя JUnit, разработчики могут легко писать автоматизированные тестовые примеры, проверять правильность кода, а также быстро находить и исправлять ошибки. Использование JUnit может улучшить качество и удобство сопровождения кода, а также облегчить непрерывную интеграцию и непрерывное тестирование. Он широко используется в области разработки Java и стал одной из стандартных платформ модульного тестирования.
Почему мне нужно изучать Junit после изучения Selenium? Selenium — это среда автоматизированного тестирования; Junit — это среда модульного тестирования. Используйте технологию для написания автоматических тестовых примеров (Selenium3). Проведите написанный тестовый пример технического управления (Junit5).
В этом разделе блога мы изучаем Junit5. Аннотации в Junit5 следующие:
аннотация | иллюстрировать |
---|---|
@Test | Определяет метод модульного тестирования. |
@ParameterizedTest | Идентифицирует параметризованный метод тестирования. |
@RepeatedTest | Определить повторяемые методы испытаний. |
@TestFactory | Определяет метод динамического тестирования, используемый для создания тестовых примеров. |
@BeforeEach | Выполняется перед каждым методом тестирования. |
@AfterEach | Выполняется после каждого метода тестирования. |
@BeforeAll | Выполненный перед всеми методами тестирования, он будет выполнен только один раз. |
@AfterAll | Выполняется после всех методов тестирования только один раз. |
@DisplayName | Задает отображаемое имя тестового класса или метода тестирования. |
@Disabled | Идентифицирует отключенный тестовый класс или метод тестирования. |
@Nested | Объявите внутренний тестовый класс. |
@Tag | Добавляйте теги к тестовым классам или методам тестирования для группировки и фильтрации. |
@Timeout | Установите таймаут выполнения тестового метода. |
@ExtendWith | Зарегистрируйте расширение, чтобы расширить функциональность JUnit. |
@RegisterExtension | Зарегистрируйте экземпляр расширения, чтобы расширить функциональность JUnit. |
В приведенной выше таблице,Среди них обычно используется жирный шрифт.,Это также основное введение в аннотацию иллюстрировать.
Чтобы использовать среду Junit5, нам сначала нужно ввести зависимости Maven из центрального хранилища. Код выглядит следующим образом:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.9.1</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.9.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
@Test
:используется для Определяет метод модульного тестирования.
@Test
void Test01() {
System.out.println("Это Test01 в JunitTest");
}
@BeforeAl
l:Выполненный перед всеми методами тестирования, он будет выполнен только один раз.
@AfterAll
:Выполняется после всех методов тестирования только один раз.
@Test
void Test01() {
System.out.println("Это Test01 в JunitTest");
}
@Test
void Test02() {
System.out.println("Это Test02 в JunitTest");
}
@BeforeAll
static void SetUp() {
System.out.println("Это утверждение в BeforeAll");
}
@AfterAll
static void TearDown() {
System.out.println("Это утверждение AfterAll");
}
@BeforeEach
: Выполняется перед каждым методом тестирования.
@AfterEach
: Выполняется после каждого метода тестирования.
@Test
void Test01() {
System.out.println("Это Test01 в JunitTest");
}
@Test
void Test02() {
System.out.println("Это Test02 в JunitTest");
}
@BeforeEach
void BeforeEachTest() {
System.out.println("Это оператор в BeforeEach");
}
@AfterEach
void AfterEachTest() {
System.out.println("Это утверждение в AfterEach");
}
@ParameterizedTest
: Идентифицирует параметризованный метод тестирования.
один параметр
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void Test04(int num) {
System.out.print(num);
}
@ParameterizedTest
@ValueSource(strings = {"1", "2", "3"," "})
void Test05(String number) {
System.out.println(number);
System.out.println("=============");
}
Если вы хотите напечатать пробелы, используйте пустую строку
CSV получить параметры
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void Test06(String name) {
System.out.println(name);
}
resource:test01.csv
:
Чжан Сан 1,Ли Си 1,Ван Ву1
Чжан Сан 2, Ли Сы 2, Ван Ву 2
Чжан Сан3,Джон Доу 3,1
Метод получения параметров
public static Stream<Arguments> Generator() {
return Stream.of(Arguments.arguments(1, «Чжан Сан»),
Arguments.arguments(2, «Ли Си»),
Arguments.arguments(3, «Ван Ву»)
);
}
@ParameterizedTest
@MethodSource("Generator")
void Test07(int num, String name) {
System.out.println(num + ":" + name);
}
@Disabled
: Идентифицирует отключенный тестовый класс или метод тестирования.
@Disabled
void Test03() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)"));
}
Выполните все найденные тестовые случаи:
Test03 не был выполнен.
@Order
аннотацияда JUnit 5
аннотация используется для указания порядка выполнения тестовых методов. Добавлено путем предоставления тестового метода @Order
аннотация и указание целочисленного значения гарантирует, что тестовые методы будут выполняться в указанном порядке.
import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
//@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest01 {
@Order(2)
@Test
void B() {
System.out.println("Сценарий использования "Лучший тест");
}
@Order(3)
@Test
void Test01() {
System.out.println("Это вариант использования теста Test01");
}
@Order(1)
@Test
void A() {
System.out.println("Сценарий использования Atest");
}
@Order(4)
@Test
void Test02() {
System.out.testprintln("Игнорированный вариант использования");
}
}
Как видите, порядок выполнения — это порядок, который мы указали вручную.
В приведенном выше примере,@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
аннотация определяет использование OrderAnnotation
сортировать методы тестирования. Затем каждый метод тестирования использует @Order
аннотации указывают порядок, в котором они должны выполняться.
Следует отметить, что:Порядок выполнения тестовых методов по умолчанию не определен..Так что используйте @Order
аннотация может обеспечить последовательный и предсказуемый порядок выполнения.
тест Пакет – это организация и реализация наборатестспособ。существоватьJUnit
середина,Можно использовать @RunWith
аннотацияи Suite
класс для создания наборов тестов.
@Suite
//Выполняем вариант использования classtest
@SelectClasses({JunitTest03.class, JunitTest.class, JunitTest01.class})
public class RunSuite {
}
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
@Suite
@SelectPackages(value = {"Test09", "Test08"})
public class RunSuite {
}
package Test08;
import org.junit.jupiter.api.Test;
public class Test07 {
@Test
void Test007() {
System.out.println("Test08 pacage Test007");
}
}
package Test09;
import org.junit.jupiter.api.Test;
public class Test09 {
@Test
void Test01() {
System.out.println("package test09 test01");
}
}
существовать JUnit 5
В метод утверждения находится в org.junit.jupiter.api.Assertions
сорт.
Используйте утверждение, чтобы проверить, соответствуют ли ожидаемые результаты фактическим результатам в существующем тесте. Если утверждение не удастся,тогда тест будет помечен как проваленный,и предоставить подробную информацию об ошибке. Это помогает быстро обнаружить и устранить проблемы.
метод утверждения | иллюстрировать |
---|---|
assertEquals(expected, actual) | Убедитесь, что два объекта равны. Может использоваться для сравнения основных типов данных, объектов и массивов. |
assertTrue(condition) | Убедитесь, что условие истинно. Если условие истинно, тест пройден; в противном случае тест не пройден. |
assertFalse(condition) | Убедитесь, что условие ложно. Если условие ложно, тест пройден; в противном случае тест не пройден. |
assertNull(actual) | Убедитесь, что объект имеет значение null. Если объект имеет значение null, тест проходит успешно; в противном случае тест не пройден. |
assertNotNull(actual) | Убедитесь, что объект не равен нулю. Если объект не равен нулю, тест проходит успешно; в противном случае тест не пройден. |
assertSame(expected, actual) | Убедитесь, что две ссылки на объекты идентичны. То есть определить, указывают ли два объекта на один и тот же адрес памяти. |
assertNotSame(unexpected, actual) | Убедитесь, что две ссылки на объекты не идентичны. |
assertArrayEquals(expectedArray, actualArray) | Убедитесь, что два массива равны. Используется для сравнения того, равны ли элементы массива. |
assertThrows(expectedType, executable) | Убедитесь, что блок кода генерирует исключение определенного типа. |
assertTimeout(duration, executable) | Проверьте, выполняется ли блок кода в течение указанного времени.,Если указанное время превышено, тест завершится неудачей. |
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class MyTest {
@Test
public void test() {
String str = "Hello, World!";
int number = 42;
boolean condition = true;
assertEquals("Hello, World!", str);
assertTrue(number > 0);
assertFalse(condition);
assertNull(null);
assertNotNull(str);
}
}
В приведенном выше примере.assertFalse(condition);
Прямо сейчастестсередина Убедитесь, что ожидаемые результаты не соответствуют фактическим результатам..