मुझे फ्लक्स स्ट्रीम को आउटपुट के रूप में वापस करने वाले फ़ंक्शन के लिए यूनिट टेस्ट लिखने में मदद चाहिए।

मैंने StepVerifier का उपयोग करने का प्रयास किया है, लेकिन मुझे लगता है कि मैं इसे गलत तरीके से उपयोग कर रहा हूं।

निम्नलिखित फ़ंक्शन का परीक्षण करने की आवश्यकता है।

public Flux<List<String>> streamCompletedScansAfterLastSubmit(@PathVariable("username") String username) {
    Flux<Long> interval = Flux.interval(Duration.ofSeconds(5));
    Flux<List<String>> completeScans = Flux.fromStream(Stream.generate(() -> scanService.getCompletedScansAfterLastSubmitForUser(username)));
    return Flux.zip(interval, completeScans).map(Tuple2::getT2);
  }

मैंने जो कोशिश की है वह है

  public void shouldPublishTheAssessmentStatusOnceFinished() {
    when(scanService.getCompletedScansAfterLastSubmitForUser(Mockito.anyString())).thenReturn(Arrays.asList("Scan1:Success"));
    StepVerifier.create(apiScanController.streamCompletedScansAfterLastSubmit("quays_ka"))
      .expectSubscription()
      .expectNext(Arrays.asList("Scan1:Success"))
      .verifyComplete();
  }

मुझे त्रुटि मिल रही है:

Java.lang.AssertionError: उम्मीद "उम्मीद पूर्ण" विफल (अपेक्षित: पूर्ण (); वास्तविक: अगला ([स्कैन 1: सफलता]))

किसी भी तरह सेवा विधि को दो बार बुलाया जाता है (मैंने जांच की है कि doAnswer का उपयोग करके)

1
KuldeepJadhav 10 जुलाई 2019, 15:37

1 उत्तर

सबसे बढ़िया उत्तर

Stream.generate(Supplier) अनंत Stream उत्पन्न करता है, इसलिए completeScans भी अनंत है।

चूंकि interval भी अनंत है, नकली सेवा के साथ दो परिणामों की ज़िपिंग Flux में होती है जो हर 5 सेकंड में ["Scan1:Success"] उत्सर्जित करती है।

इसके विपरीत, आपका StepVerifier समाप्ति से पहले एक सूची के बहुत सीमित Flux की अपेक्षा करता है, इसलिए जैसे ही यह सूची की दूसरी घटना को देखता है, यह विफल हो जाता है।

0
Simon Baslé 12 जुलाई 2019, 15:56