测试

优质
小牛编辑
139浏览
2023-12-01

Spring Cloud Stream支持测试您的微服务应用程序,而无需连接到消息系统。您可以使用spring-cloud-stream-test-support库提供的TestSupportBinder,可以将其作为测试依赖项添加到应用程序中:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-test-support</artifactId>
    <scope>test</scope>
  </dependency>
注意

TestSupportBinder使用Spring Boot自动配置机制取代类路径中找到的其他绑定。因此,添加binder作为依赖关系时,请确保正在使用test范围。

TestSupportBinder允许用户与绑定的频道进行交互,并检查应用程序发送和接收的消息

对于出站消息通道,TestSupportBinder注册单个订户,并将应用程序发送的消息保留在MessageCollector中。它们可以在测试过程中被检索,并对它们做出断言。

用户还可以将消息发送到入站消息通道,以便消费者应用程序可以使用消息。以下示例显示了如何在处理器上测试输入和输出通道。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ExampleTest {
  @Autowired
  private Processor processor;
  @Autowired
  private MessageCollector messageCollector;
  @Test
  @SuppressWarnings("unchecked")
  public void testWiring() {
  Message<String> message = new GenericMessage<>("hello");
  processor.input().send(message);
  Message<String> received = (Message<String>) messageCollector.forChannel(processor.output()).poll();
  assertThat(received.getPayload(), equalTo("hello world"));
  }
  @SpringBootApplication
  @EnableBinding(Processor.class)
  public static class MyProcessor {
  @Autowired
  private Processor channels;
  @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
  public String transform(String in) {
   return in + " world";
  }
  }
}

在上面的示例中,我们正在创建一个具有输入和输出通道的应用程序,通过Processor接口绑定。绑定的接口被注入测试,所以我们可以访问这两个通道。我们正在输入频道发送消息,我们使用Spring Cloud Stream测试支持提供的MessageCollector来捕获消息已经被发​​送到输出通道。收到消息后,我们可以验证组件是否正常工作。