如何测试订阅之前什么都不会发生()
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");
}
}
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");
}
}