如何测试订阅之前什么都不会发生()

How to test Nothing Happens Until You subscribe()

return Mono.just(key) //
            .map(Service1::doSomething) //
            .map(Service2:: doSomething) //
            .map(Service3::getBytes);

我的代码如上,我在服务的方法(Service1,Service2和Service3)中有很多日志,所以我可以确认这些方法没有被调用,直到我通过手动验证日志文件调用订阅方法.是否有任何测试工具可以帮助我自动执行该测试?

Mokito 可以使用 mocks/spys 跟踪调用。这是一个使用 Spring:

的例子
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.test.context.junit4.SpringRunner;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

@RunWith(SpringRunner.class)
public class ExampleTests {

  @SpyBean
  private Service1 service1;

  @SpyBean
  private Service2 service2;

  @SpyBean
  private Service3 service3;

  @Test
  public void verifyNothingHappensWithoutSubscribe() {

    Mono.just("key")
        .map(service1::doSomething)
        .map(service2::doSomething)
        .map(service3::getBytes);

    verify(service1, times(0)).doSomething("key");
    verify(service2, times(0)).doSomething("key");
    verify(service3, times(0)).getBytes("key");

  }

  @Test
  public void verifyCallsWhenSubscribed() {

    Mono<byte[]> testMono = Mono.just("key")
        .map(service1::doSomething)
        .map(service2::doSomething)
        .map(service3::getBytes);

    StepVerifier.create(testMono)
        .expectNextCount(1)
        .verifyComplete();

    verify(service1, times(1)).doSomething("key");
    verify(service2, times(1)).doSomething("key");
    verify(service3, times(1)).getBytes("key");

  }

}