2017-06-26 10 views
0

StepVerifierには、次の要素の値に対してアサーションを実行することを可能にするassertNextメソッドがあります。ステップベリファイアの残りの要素すべてに対してアサーションを実行する方法は?

StepVerifier.create(dataFlux) 
      .assertNext(v -> checkValue(v) 
      .verifyComplete(); 

残りのすべての要素に対してアサーションを実行する(たとえば、すべての要素が正であることを確認するなど)良い方法はありますか?私はassertEveryNextElementメソッドのようなものを期待しています。フラックスのすべての要素にアサーションを実行するための

答えて

0

私の最初の試みは、それがAssertionErrorsを再スロー、

StepVerifier.create(dataFlux) 
     .recordWith(ArrayList::new) 
     .thenConsumeWhile(x -> true) // Predicate on elements 
     .consumeRecordedWith(matches -> 
      matches.forEach(v -> checkValue(v))) 
     .verifyComplete(); 

UPDサイモン・バーゼルはちょうどthenConsumeWhileを使用することが示唆されました。このタスクにStepVerifierを使用する

StepVerifier.create(dataFlux) 
     .thenConsumeWhile(v -> { 
      assertThat(v).equalsTo(expected); 
      return true; 
     }) 
     .verifyComplete(); 

そして、より多くの標準的な方法は次のようになります。

StepVerifier.create(dataFlux) 
     .thenConsumeWhile(v -> return expected.equals(v)) 
     .verifyComplete(); 
1

それを行うには、予想される方法は、実際にthenConsumeWhile演算子を使用して述語を提供することです。シーケンス内に一致しない要素がある場合、StepVerifierはエラーになります。

Consumerではなく、Predicateとなるアサーションベースではありません。あなたは依然としてアサーションライブラリを使用できると言いましたが、AssertionErrorはテストに失敗するはずです(まだ偽の述語結果を返す必要があります)。

(サイド警告:これは無限の配列とうまく動作しない心に留めておく)

関連する問題