Сочетание Spring Test и JUnit обеспечивает эффективное и удобное решение для тестирования, а Spring Boot Test добавляет тестирование слайсов и расширяет возможности Mock поверх Spring Test.
Типы тестов, поддерживаемые Spring Boot Test, в основном делятся на следующие три категории:
- Модульное тестирование, ориентированное на методы тестирования, имеет общую аннотацию @Test
- Функциональный тест, бизнес-ориентированный тест, также может использовать возможности MOCK в тесте поверхности среза, обычно рассматриваемом @ Runwith, @ SpringBootstest и т. д.
- Срезовое тестирование для граничных функций, которые трудно протестировать, между модульным и функциональным тестированием, обычно используемые аннотации включают @RunWith, @WebMvcTest и т. д.
Ключевые элементы и методы поддержки в процессе тестирования следующие:
- Протестируйте работающую среду, запустите контейнер Spring через @RunWith и @SpringBootTest.
- Возможность имитации, Mockito предоставляет возможность Mock
- Возможность утверждения, AssertJ, Hamcrest, JsonPath обеспечивают возможность утверждения
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServerTestApplication {
public static void main(String[] args) {
SpringApplication.run(MyServerTestApplication.class, args);
}
}
Открытое тестовое тест нужно только ввести весенний загрузчик-стартер-тестирование, и использование нот @runwith @springboottestest, вы можете начать тестирование в весенней загрузке.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
После введения spring-boot-starter-test от него также будут зависеть соответствующие тестовые библиотеки классов.
- JUnit, стандарт для тестирования Java, версия зависимости по умолчанию — 4.12 (JUnit5 и JUnit4 сильно отличаются)
- Spring Test & Spring Boot Test, тестовая поддержка
- AssertJ, который предоставляет поток утверждений
- Hamcrest предоставляет богатый сопоставитель, библиотеку объектов сопоставления (также известную как ограничения или предикаты).
- Mockito, платформа Mock, может создавать объекты Mock по типу, указывать конкретные ответы в соответствии с параметрами метода, а также поддерживать утверждения в процессе вызова Mock.
- JSONassert, который обеспечивает функциональность утверждений для JSON.
- JsonPath, обеспечивает функциональность XPATH для JSON.
модульный тест
public class UserServiceTest extends MyServerTestApplication {
@Autowired
private IUserService userService;
@Test
public void testAddUser() {
userService.add(buildUser("Jack", 18));
}
private User buildUser(String username, int age) {
User user = new User();
user.setUsername(username);
user.setAge(age);
return user;
}
}
- @RunWith — это аннотация, предоставляемая JUnit4, которая соединяет Spring и JUnit.
- @SpringBootTest заменяет аннотацию @ContextConfiguration в Spring-Test, цель состоит в том, чтобы загрузить ApplicationContext, запустить контейнер Spring, и SpringBootTest автоматически извлечет файл конфигурации.Порядок поиска начинается с текущего пакета и ищет уровни, аннотированные Тип @SpringBootApplication или @SpringBootConfiguration
функциональный тест
После использования @SpringBootTest Spring загрузит все управляемые компоненты, что в основном эквивалентно запуску всей службы, и тест может выполнять функциональное тестирование.
Поскольку Интернет является наиболее распространенным сервисом, в аннотации @SpringBootTest также приведены четыре типа настроек параметров веб-среды.
public static enum WebEnvironment {
MOCK(false),
RANDOM_PORT(true),
DEFINED_PORT(true),
NONE(false);
private final boolean embedded;
private WebEnvironment(boolean embedded) {
this.embedded = embedded;
}
public boolean isEmbedded() {
return this.embedded;
}
}
- Mock, значение по умолчанию, предоставляет среду Mock, которую можно использовать в сочетании с @AutoConfigureMockMvc или @AutoConfigureWebTestClient для включения функций, связанных с Mock.В настоящее время встроенная служба на самом деле не запущена и не отслеживает порт веб-службы.
- RANDOM_PORT, запускает реальную веб-службу, прослушивающую случайный порт.
- DEFINED_PORT, запустите реальную веб-службу, прослушивающую определенный порт (полученный из файла конфигурации spring)
- NONE, запустите не-Web ApplicationContext, который не предоставляет ни фиктивную среду, ни настоящую веб-службу.
Если путь к классам текущей службы не содержит веб-зависимостей, Spring запустит не-веб-контекст приложения, а веб-среда в это время не имеет смысла.
Ссылаться на
Подробное объяснение теста SpringBoot и аннотации
spring-boot-features-testing
Написание модульных тестов в Spring Boot