Модульный тест или интеграционный тест в Spring Boot - PullRequest
0 голосов
/ 12 февраля 2019

Я посмотрел различные онлайн-учебники, связанные с тестированием в Spring Boot, и был озадачен тем, как назывались тесты.

Некоторые статьи ссылаются на тесты контроллера, которые используют аннотацию @WebMvcTest как Unit Test, тогда как некоторые ссылаются на Integration Test.Не уверен, какой из них правильный.

Те же вопросы относятся к тесту уровня репозитория с @DataJpaTest.

У меня есть два следующих теста, написанных в моем приложении, один для контроллера и другой для хранилища.

Внизу у меня есть несколько вопросов, касающихся обоих.Пожалуйста, руководство.

UserControllerTest.java

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;
    @MockBean
    private UserRepository userRepository;

    @Test
    public void signUp() throws Exception {
        this.mockMvc.perform(get("/signup")).andExpect(status().isOk());
    }

}

UserRepositoryTest.java

@RunWith(SpringRunner.class)
@DataJpaTest
public class UserRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;
    @Autowired
    private UserRepository userRepository;

    @Test
    public void whenFindByName_thenReturnEmployee() {
        // given
        User u = new User();
        u.setName("ab");
        u.setEmail("ab@cd.com");
        entityManager.persistAndFlush(u);
        // when
        Optional<User> user = userRepository.findById(1L);
        // then
        assertTrue(user.isPresent());
    }

}

Мои вопросы:

  1. Определяет ли аннотация @WebMvcTest, @DataJpaTest или @SpringBootTest тип теста (Unit или Integration) или в тесте используется @MockBean?
  2. Предполагая, что UserControllerTest.java является модульным тестом, мы смоделируем здесь зависимость userRepository с помощью @MockBean private UserRepository userRepository, тогда как в UserRepositoryTest.java мы автоматически подключаем его с @Autowired private UserRepository userRepository.Почему ??

1 Ответ

0 голосов
/ 13 февраля 2019

Основное различие между модульными тестами и интеграционными тестами с использованием Spring Boot заключается в том, что модульные тесты могут выполняться изолированно, в то время как интеграционные тесты будут запускать контекст Spring до запуска.

Работа в изоляции требует, чтобы вы высмеивали свои зависимости на основе тестируемого контроллера.Делая это, вы позволяете себе тестировать очень специфические тестовые примеры, не беспокоясь о накладных расходах базы данных или службы.Следовательно, используя аннотацию @MockBean.

Принимая во внимание, что интеграционное тестирование сосредоточено на интеграции различных уровней приложения, таких как база данных.Большинство людей используют базу данных в памяти, такую ​​как H2, для тестирования своих репозиториев.Интеграционные тесты не должны содержать никаких насмешек, и оба типа тестирования должны выполняться отдельно.

Ресурс: https://www.baeldung.com/spring-boot-testing

...