有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

@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自动连接UserService中的存储库。 我想了解是否可以在一个配置类中取出并使用所有测试Repository类型存根。提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    用这个

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

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