一段时间以来,我一直试图增加这段特定代码的代码覆盖率,但似乎无法解决。这个私有方法是从公共方法中调用的。公共方法的调用方式如下所示。我的理解是,由于对主题的订阅发生在稍后,因此没有分配分区,因此在单元测试时
addAssignListener()
从不调用。
class someClass {
public ReactiveKafkaConsumerTemplate somePublicMethod(Set<String> topics) {
ReceiverOptions<Object, Object> receiverOptions = somePrivateMethod(customConsumerProperties);
receiverOptions = receiverOptions.subscription(topics);
return new ReactiveKafkaConsumerTemplate<>(receiverOptions);
}
private ReceiverOptions<Object, Object> somePrivateMethod(Map<String, Object> customConsumerProperties) {
boolean featureFlag = someConfig.isEnabled();
ReceiverOptions<Object, Object> basicReceiverOptions = ReceiverOptions.create(customConsumerProperties);
basicReceiverOptions = basicReceiverOptions.addAssignListener(partitions -> {
partitions.forEach(receiverPartition -> Mono.just(receiverPartition)
.doOnNext(receiverPartition1 -> {
if (featureFlag) {
receiverPartition1.seekToTimestamp(someConfig.getStartTimestamp());
}
})
.subscribe());
});
return basicReceiverOptions;
}
}
单元测试
@Test
void test() {
ReactiveKafkaConsumerTemplate<String, String> template = someClass.somePublicMethod(Set.of("sample-topic"));
assertNotNull(template);
}
如何对那些特定的代码行进行单元测试?
我尝试手动调用
assignment
和
mocking the Consumer
但没有运气。