繁体   English   中英

如何正确测试接收器(处理器)的助焊剂?

[英]How to properly test flux from sink (processor)?

我有像 class 这样的处理器,它在内部使用接收器。 我做了一个非常简化的来展示我的问题:

    import reactor.core.publisher.Sinks;
    import reactor.test.StepVerifier;
    import java.time.Duration;

    public class TestBed {
        public static void main(String[] args) {
            class StringProcessor {
                public final Sinks.Many<String> sink = Sinks.many().multicast().directBestEffort();

                public void httpPostWebhookController(String inputData) {
                    sink.emitNext(
                            inputData.toLowerCase() + " " + inputData.toUpperCase(),
                            (signalType, emitResult) -> {
                                System.out.println("error, signalType=" + signalType + "; emitResult=" + emitResult);
                                return false;
                            }
                    );
                }
            }

            final StringProcessor stringProcessor = new StringProcessor();
            final StepVerifier stepVerifier = StepVerifier.create(stringProcessor.sink.asFlux())
                    .expectSubscription()
                    .expectNext("asdf ASDF")
                    .expectNext("qw QW")
                    .thenCancel();

            stringProcessor.httpPostWebhookController("asdf");
            stringProcessor.httpPostWebhookController("Qw");

            stepVerifier.verify(Duration.ofSeconds(2));
        }
    }

我的 stepVerified 没有订阅,当它订阅时(在 verify(Duration) 调用时),它错过了测试信号。 我无法在httpPostWebhookController方法调用之前移动验证调用,因为它被阻塞并且会因为没有信号到来而失败。

在这种情况下如何使用 StepVerifier?

正如我在 udemy 课程(讲师Vinoth Selvaraj )上所问的那样,解决方案是使用verifyLater调用。 它将导致触发订阅并且不会阻塞。 固定测试代码:

final StringProcessor stringProcessor = new StringProcessor();
final StepVerifier stepVerifier = StepVerifier.create(stringProcessor.sink.asFlux().log())
        .expectSubscription()
        .expectNext("asdf ASDF")
        .expectNext("qw QW")
        .thenCancel()
        .verifyLater();

stringProcessor.httpPostWebhookController("asdf");
stringProcessor.httpPostWebhookController("Qw");

stepVerifier.verify(Duration.ofSeconds(2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM