Spring Integration Test Binder 不模拟依赖

Spring Integration Test Binder doesn't mock dependency

我有一个项目 (https://github.com/serjteplov/demo-kafka-mock.git),其中有几个虚拟函数可以从 kafka 读取消息。在其中一个函数中,crudRepository 用于对 DB 执行一些操作:

@EnableAutoConfiguration
public class SampleFunctionConfiguration {

    @Bean
    public Function<String, String> uppercase(UserRepository userRepository) {

        String id = userRepository.findById("abc").map(User::getId).orElse(null);

        return value -> value.toUpperCase() + " id=" + id;
    }

    @Bean
    public Function<String, String> reverse() {
        return value -> new StringBuilder(value).reverse().toString();
    }
}

所以问题是在大写活页夹函数上编写测试。为了使这个测试正常工作,我必须模拟这样的调用

userRepository.findById("abc")

然后我创建了 mock 并将其添加到上下文中:

    @Primary
    @Bean("test")
    UserRepository userRepository() {
        return new DetachedMockFactory().Mock(UserRepository)
    }

和测试中的模拟调用:

userRepository.findById("abc") >> Optional.of(new User("abc", "Bob"))

成功创建测试执行模拟后,但 userRepository.findById("abc") 仍然 returns 为空。 谁能告诉我如何解决这个问题?或者任何替代的实现和解决方法都很好

您正在 bean 定义中而不是函数中调用存根方法。

@Bean
public Function<String, String> uppercase(UserRepository userRepository) {

    String id = userRepository.findById("abc").map(User::getId).orElse(null);

    return value -> value.toUpperCase() + " id=" + id;
}

@Bean
public Function<String, String> uppercase(UserRepository userRepository) {

    return value -> {
        String id = userRepository.findById("abc").map(User::getId).orElse(null);
        return value.toUpperCase() + " id=" + id;
    };

}