代码之家  ›  专栏  ›  技术社区  ›  tripletk

无法覆盖ReceiverOptions.addAssignListener()的代码覆盖范围中的Consumer函数

  •  0
  • tripletk  · 技术社区  · 1 年前

    一段时间以来,我一直试图增加这段特定代码的代码覆盖率,但似乎无法解决。这个私有方法是从公共方法中调用的。公共方法的调用方式如下所示。我的理解是,由于对主题的订阅发生在稍后,因此没有分配分区,因此在单元测试时 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 但没有运气。

    0 回复  |  直到 1 年前