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;
};
}
我有一个项目 (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"))
您正在 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;
};
}