Введение в основы тестирования SpringBoot

Spring Boot

Сочетание Spring Test и JUnit обеспечивает эффективное и удобное решение для тестирования, а Spring Boot Test добавляет тестирование слайсов и расширяет возможности Mock поверх Spring Test.

Типы тестов, поддерживаемые Spring Boot Test, в основном делятся на следующие три категории:

  1. Модульное тестирование, ориентированное на методы тестирования, имеет общую аннотацию @Test
  2. Функциональный тест, бизнес-ориентированный тест, также может использовать возможности MOCK в тесте поверхности среза, обычно рассматриваемом @ Runwith, @ SpringBootstest и т. д.
  3. Срезовое тестирование для граничных функций, которые трудно протестировать, между модульным и функциональным тестированием, обычно используемые аннотации включают @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 от него также будут зависеть соответствующие тестовые библиотеки классов.

  1. JUnit, стандарт для тестирования Java, версия зависимости по умолчанию — 4.12 (JUnit5 и JUnit4 сильно отличаются)
  2. Spring Test & Spring Boot Test, тестовая поддержка
  3. AssertJ, который предоставляет поток утверждений
  4. Hamcrest предоставляет богатый сопоставитель, библиотеку объектов сопоставления (также известную как ограничения или предикаты).
  5. Mockito, платформа Mock, может создавать объекты Mock по типу, указывать конкретные ответы в соответствии с параметрами метода, а также поддерживать утверждения в процессе вызова Mock.
  6. JSONassert, который обеспечивает функциональность утверждений для JSON.
  7. 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;
        }
    }
  1. Mock, значение по умолчанию, предоставляет среду Mock, которую можно использовать в сочетании с @AutoConfigureMockMvc или @AutoConfigureWebTestClient для включения функций, связанных с Mock.В настоящее время встроенная служба на самом деле не запущена и не отслеживает порт веб-службы.
  2. RANDOM_PORT, запускает реальную веб-службу, прослушивающую случайный порт.
  3. DEFINED_PORT, запустите реальную веб-службу, прослушивающую определенный порт (полученный из файла конфигурации spring)
  4. NONE, запустите не-Web ApplicationContext, который не предоставляет ни фиктивную среду, ни настоящую веб-службу.

Если путь к классам текущей службы не содержит веб-зависимостей, Spring запустит не-веб-контекст приложения, а веб-среда в это время не имеет смысла.

Ссылаться на

Подробное объяснение теста SpringBoot и аннотации
spring-boot-features-testing
Написание модульных тестов в Spring Boot