为许多测试定义通用模拟对象 类

Define common mock objects for many test classes

我正在学习使用 Spring Boot 进行单元测试。我使用 Mockito 从 Spring 数据存储库 class 创建了一个存根对象。一切正常,这是一个代码:

@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
}

但如果我们不需要不同的存根行为,则为每个 class 使用此 @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 自动装配 UserService 中的存储库。 我想了解是否可以在一种配置 class 中取出并使用所有测试 Repository 类型的存根。提前致谢!

就用这个

class TestConfig {

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

   }

}

然后你就可以@Import(TestConfig.class)在你需要的地方