简体   繁体   English

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

[英]Define common mock objects for many test classes

I'm learning unit testing with Spring Boot.我正在学习使用 Spring Boot 进行单元测试。 I've created a stub object from Spring Data repository class using Mockito.我使用 Z4D1142CA816EAC3E337B383BC0B7B7 从 Spring 数据存储库 class 创建了一个存根 object。 All works fine, here's a code:一切正常,这是一个代码:

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

But it's kind of boilerplate style to use this @BeforeAll test repository configuration for each class, if we don't need different stub behaviour.但是,如果我们不需要不同的存根行为,则为每个 class 使用此 @BeforeAll 测试存储库配置是一种样板样式。 Then i tried to use @TestConfiguration然后我尝试使用@TestConfiguration

@TestConfiguration
 public class SpringRepositoryTestConfiguration {

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

After that i used之后我用

@SpringBootTest(classes = SpringRepositoryTestConfiguration.class)

But i can't using @MockBean to autowire repository in UserService now.但是我现在不能使用@MockBeanUserService中自动装配存储库。 I want to understand is it possible to take out and use all test Repository type stubs in one configuration class.我想了解是否可以在一个配置 class 中取出并使用所有测试Repository类型的存根。 Thank you in advance!先感谢您!

Just use this就用这个

class TestConfig {

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

   }

}

Then you can just @Import(TestConfig.class) where you need it然后你可以在你需要的地方使用@Import(TestConfig.class)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM