Spring Binder Unit Test

当我们用消息在中间件之间传递时,很容易使用到spring cloud stream, 而spring又高度集成了spring-cloud-stream-binder来简化代码。

具体逻辑如下:

pom.xml

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

properties

spring.cloud.stream.bindings.process-in-0.destination=from_topic
spring.cloud.stream.bindings.process-in-0.group=consumer_1

# GMI Kafka producer
spring.cloud.stream.bindings.process-out-0.destination=to_topic
//function 
@Bean public Function<Message<FromTopicMsg>, Message<ToTopicMsg>> process(DemoService service) { return fromMessage -> fromMessage.filter(service::isValid).map(service::convert); }  

代码简化了很多,然而ut该如何实现呢?

pom.xml

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-kafka-streams</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
            <type>test-jar</type>
            <classifier>test-binder</classifier>
        </dependency>

  

@Test
public void testSingleFunction() {
	this.context = new SpringApplicationBuilder(TestChannelBinderConfiguration
			.getCompleteConfiguration(FunctionsConfiguration.class))
					.web(WebApplicationType.NONE)
					.run("--spring.cloud.stream.function.definition=toUpperCase",
							"--spring.jmx.enabled=false");

	InputDestination source = this.context.getBean(InputDestination.class);
	OutputDestination target = this.context.getBean(OutputDestination.class);
	source.send(new GenericMessage<byte[]>("hello".getBytes(StandardCharsets.UTF_8)));
	assertThat(target.receive(1000).getPayload())
			.isEqualTo("HELLO".getBytes(StandardCharsets.UTF_8));
	//to ensure there is no possibility of load balancing to the EnableBinding
	source.send(new GenericMessage<byte[]>("hello".getBytes(StandardCharsets.UTF_8)));
	assertThat(target.receive(1000).getPayload())
			.isEqualTo("HELLO".getBytes(StandardCharsets.UTF_8));
}

  

 

引自:

https://www.programcreek.com/java-api-examples/?api=org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration

posted on 2020-12-10 22:16  涤生-三省吾身  阅读(149)  评论(0编辑  收藏  举报

导航