我正在尝试使用TestSupportBinder为spring cloud stream应用程序编写测试。我发现的所有例子,包括official documents和official github,都是用Processor
来测试Transformer
。这些测试使用Tranformer
获取输出通道,并将Channel对象输入messageCollector.forChannel
方法以轮询输出。
但是,我没有使用提供的Processer
,而是编写了自己的界面。我找不到在测试代码中获取所需Channel对象的方法。我试图将我的接口自动装入测试类以获取Channel对象,但以java.lang.IllegalArgumentException: Channel [MY_CHANNEL] was not bound by class org.springframework.cloud.stream.test.binder.TestSupportBinder
结束。
错误消息表示通道MY_CHANNEL
未注册到MessageCollector中。并且,这表明,您的应用程序中未使用MY_CHANNEL
声明接口中的通道EnableBinding
。你的应用程序中是否有@EnableBinding(MyOwnInterface.class)
(MyOwnInterface声明MY_CHANNEL
通道)?
在看了一下spring docs here后,我注意到它似乎故意只跟踪输出通道,而不是输入通道。
例如,请参阅:
对于出站消息通道,TestSupportBinder注册单个订户并保留应用程序在MessageCollector中发出的消息。它们可以在测试期间检索并对它们进行断言。
此外,在示例中,它们只是在输出通道上演示:
messageCollector.forChannel(processor.output()).poll()
在我看来,他们希望您通过调用listen方法来跟踪输入通道。