【问题标题】:How to only mock a method of a bean in Spring using Mockito?如何仅使用 Mockito 在 Spring 中模拟 bean 的方法?
【发布时间】:2017-08-12 11:09:42
【问题描述】:

我在 Spring 测试中使用 @Primary@Profile 模拟一个 bean:

@Profile("test")
@Configuration
public class TestBeanConf {

@Bean
@Primary
public UserService userService() {
    UserService userService = Mockito.mock(UserService.class);
    TokenValidationUrl validation = new TokenValidationUrl();
    validation.setValid(true);
    validation.setUid("123456789");
    Mockito.when(userService.tokenValidation("23456")).thenReturn(validation);
    return userService;
}

但是UserService bean 的其他方法返回null,我怎样才能窥探真正创建的bean 并且只模拟tokenValidation 方法?

【问题讨论】:

    标签: spring unit-testing mocking mockito


    【解决方案1】:

    为了窥探UserService bean 的一种方法,在构造这个bean 的过程中,我们通过将其作为参数发送来从Spring 上下文中自动装配现有的UserService 实例,并使用Mockito 的窥探功能:

    @Profile("test")
    @Configuration
    public class TestBeanConf {
    
    @Bean
    @Primary
    public UserService userServiceTest(UserService userService) {
        UserService userService = Mockito.spy(userService);
        TokenValidationUrl validation = new TokenValidationUrl();
        validation.setValid(true);
        validation.setUid("123456789");
        Mockito.when(userService.tokenValidation("23456")).thenReturn(validation);
        return userService;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多