StepVerifierでオブジェクトをテストしたいときはassertNextを使う
Spring WebFluxで登場するMonoやFluxをテストする際にはStepVerifierを使用する。
Mono<String>
をテストする場合、以下のようにexpectNext
メソッドを使うことでテストできる。
Mono<String> actual = Mono.just("test"); String expect = "test"; StepVerifier.create(actual) .expectNext(expect) .verifyComplete();
一方でオブジェクトをテストする場合にexpectNext
は不適である。
class User { // コンストラクタなどは省略 private final String name; private final int age; }
上のようにUserクラスを定義し、Monoのテストを書くとき、
Mono<User> actual = Mono.just(new User("name", 20)); User expect = new User("name", 20); StepVerifier.create(actual) .expectNext(expect) .verifyComplete();
ではフィールドの検証ではなくポインタの検証になってしまうため、このテストは落ちてしまう。
この場合はassertNext
を使用し内部でassertThat().usingRecursiveComparison()
を使用することで、フィールド同士を比較してくれる。
Mono<User> actual = Mono.just(new User("name", 20)); User expect = new User("name", 20); StepVerifier.create(actual) .assertNext(t -> assertThat(t).usingRecursiveComparison().isEqualTo(expect)) .verifyComplete()