Я посмотрел различные онлайн-учебники, связанные с тестированием в 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());
}
}
Мои вопросы:
- Определяет ли аннотация
@WebMvcTest, @DataJpaTest
или @SpringBootTest
тип теста (Unit
или Integration
) или в тесте используется @MockBean
? - Предполагая, что
UserControllerTest.java
является модульным тестом, мы смоделируем здесь зависимость userRepository
с помощью @MockBean private UserRepository userRepository
, тогда как в UserRepositoryTest.java
мы автоматически подключаем его с @Autowired private UserRepository userRepository
.Почему ??