Определите общие фиктивные объекты для многих тестовых классов - PullRequest
0 голосов
/ 17 июня 2020

Я изучаю модульное тестирование с помощью Spring Boot. Я создал объект-заглушку из класса репозитория Spring Data с помощью Mockito. Все работает нормально, вот код:

@SpringBootTest
class UserServiceTest {

@MockBean
private UserRepository userRepository;

@BeforeAll
public void  configureMock() {
    User user = new User("mishenev",
            "Dmitrii",
            "Mishenev",
            "123",
            "mishenev.8@gmailcom",
            new UserSettings());
    when(userRepository.findById(anyLong())).thenReturn(Optional.of(user));
    when(userRepository.findUserByUserName(anyString())).thenReturn(user);

 // .. Tests
}

Но это своего рода шаблонный стиль для использования этой конфигурации тестового репозитория @BeforeAll для каждого класса, если нам не нужно различное поведение заглушки. Затем я попытался использовать @ TestConfiguration

@TestConfiguration
 public class SpringRepositoryTestConfiguration {

@Bean
public UserRepository userRepository () {
    UserRepository userRepository = Mockito.mock(UserRepository.class);
    // Configuring mock's behaviour
    return userRepository;
    }
}

После этого я использовал

@SpringBootTest(classes = SpringRepositoryTestConfiguration.class)

Но я не могу использовать @MockBean в репозиторий autowire в UserService сейчас. Я хочу понять, можно ли вынуть и использовать все заглушки типа test Repository в одном классе конфигурации. Заранее спасибо!

1 Ответ

1 голос
/ 17 июня 2020

Просто используйте это

class TestConfig {

   @Bean
   UserRepository userRepository() {
       final UserRepository repo = mock(UserRepository.class);
       .. do mocking ..
       return repo;

   }

}

Тогда вы можете просто @Import(TestConfig.class) там, где вам это нужно

...