{"id":25201,"date":"2026-06-03T06:08:42","date_gmt":"2026-06-02T23:08:42","guid":{"rendered":"https:\/\/huongdanjava.com\/?p=25201"},"modified":"2026-06-03T06:08:56","modified_gmt":"2026-06-02T23:08:56","slug":"unit-testing-voi-spring-cloud-stream","status":"publish","type":"post","link":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html","title":{"rendered":"Unit testing v\u1edbi Spring Cloud Stream"},"content":{"rendered":"<p>Spring Cloud Stream cung c\u1ea5p cho ch\u00fang ta dependency spring-cloud-stream-test-binder, gi\u00fap ch\u00fang ta c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng vi\u1ebft unit test cho c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i g\u1ecdi t\u1edbi c\u00e1c message broker th\u1eadt.<\/p>\n<p>C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 khai b\u00e1o s\u1eed d\u1ee5ng dependency spring-cloud-stream-test-binder n\u00e0y nh\u01b0 sau:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;dependency&gt;\r\n  &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;spring-cloud-stream-test-binder&lt;\/artifactId&gt;\r\n  &lt;scope&gt;test&lt;\/scope&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>M\u00ecnh s\u1ebd s\u1eed d\u1ee5ng project v\u00ed d\u1ee5 trong <a href=\"https:\/\/huongdanjava.com\/vi\/gui-message-su-dung-streambridge-cua-spring-cloud-stream.html\" target=\"_blank\" rel=\"noopener\">b\u00e0i vi\u1ebft tr\u01b0\u1edbc<\/a> \u0111\u1ec3 l\u00e0m v\u00ed d\u1ee5, c\u00e1c b\u1ea1n nh\u00e9!<\/p>\n<p>\u0110\u1ec3 vi\u1ebft unit test cho Spring Cloud Stream, ch\u00fang ta s\u1ebd annotate test class v\u1edbi annotation l\u00e0 @EnableTestBinder:<\/p>\n<pre class=\"lang:java decode:true \">package com.huongdanjava.springcloudstream;\r\n\r\nimport org.springframework.boot.test.context.SpringBootTest;\r\nimport org.springframework.cloud.stream.binder.test.EnableTestBinder;\r\n\r\n@SpringBootTest\r\n@EnableTestBinder\r\nclass SpringCloudStreamRabbitmqExampleApplicationTests {\r\n\r\n}\r\n<\/pre>\n<p>Annotation @EnableTestBinder s\u1ebd \u0111\u00e1nh d\u1ea5u \u0111\u1ec3 Spring t\u1ea1o 2 bean l\u00e0 InputDestination v\u00e0 OutputDestination, gi\u00fap ch\u00fang ta c\u00f3 th\u1ec3 simulate vi\u1ec7c g\u1eedi v\u00e0 nh\u1eadn c\u00e1c message t\u1edbi message broker v\u1edbi Spring Cloud Stream. InputDestination s\u1ebd simulate vi\u1ec7c nh\u1eadn message t\u1eeb message broker t\u1edbi \u1ee9ng d\u1ee5ng, c\u00f2n OutputDestination th\u00ec s\u1ebd simulate vi\u1ec7c g\u1eedi message t\u1eeb \u1ee9ng d\u1ee5ng t\u1edbi message broker, c\u00e1c b\u1ea1n nh\u00e9!<\/p>\n<p>M\u00ecnh s\u1ebd t\u1ea1o m\u1edbi t\u1eadp tin application.yml n\u1eb1m trong th\u01b0 m\u1ee5c src\/test\/resources \u0111\u1ec3 s\u1eed d\u1ee5ng cho ph\u1ea7n testing n\u00e0y!<\/p>\n<h3>InputDestination<\/h3>\n<p>Nh\u01b0 m\u00ecnh \u0111\u00e3 n\u00f3i \u1edf tr\u00ean, bean c\u1ee7a class InputDestination s\u1ebd simulate vi\u1ec7c nh\u1eadn message t\u1eeb message broker t\u1edbi \u1ee9ng d\u1ee5ng.<\/p>\n<p>Hi\u1ec7n t\u1ea1i th\u00ec trong project v\u00ed d\u1ee5, m\u00ecnh \u0111\u00e3 \u0111\u1ecbnh ngh\u0129a bean c\u1ee7a interface Consumer \u0111\u1ec3 nh\u1eadn message t\u1eeb message broker:<\/p>\n<pre class=\"lang:java decode:true \">@Bean\r\npublic Consumer&lt;String&gt; receiveConsumer() {\r\n  return message -&gt; {\r\n    System.out.println(\"Received: \" + message);\r\n  };\r\n}<\/pre>\n<p>Cho ph\u1ea7n testing, \u0111\u1ec3 l\u00e0m v\u00ed d\u1ee5 cho ph\u1ea7n assertion, m\u00ecnh s\u1ebd th\u00eam m\u1edbi class MessageStore v\u1edbi annotation @Component:<\/p>\n<pre class=\"lang:java decode:true \">package com.huongdanjava.springcloudstream;\r\n\r\nimport org.springframework.stereotype.Component;\r\n\r\n@Component\r\npublic class MessageStore {\r\n\r\n  private String lastMessage;\r\n\r\n  public void setLastMessage(String message) {\r\n    this.lastMessage = message;\r\n  }\r\n\r\n  public String getLastMessage() {\r\n    return lastMessage;\r\n  }\r\n}<\/pre>\n<p>\u0111\u1ec3 khi nh\u1eadn message t\u1eeb message broker, class MessageStore n\u00e0y s\u1ebd ghi nh\u1eadn message \u0111\u00f3, nh\u01b0 sau:<\/p>\n<pre class=\"lang:java decode:true \">@Bean\r\npublic Consumer&lt;String&gt; receiveConsumer(MessageStore store) {\r\n  return message -&gt; {\r\n    store.setLastMessage(message);\r\n    System.out.println(\"Received: \" + message);\r\n  };\r\n}<\/pre>\n<p>M\u00ecnh s\u1ebd \u0111\u1ecbnh ngh\u0129a binding cho interface Consumer n\u00e0y trong t\u1eadp tin application.yml \u1edf th\u01b0 m\u1ee5c src\/test\/resources nh\u01b0 sau:<\/p>\n<pre class=\"lang:yaml decode:true \">spring:\r\n  cloud:\r\n    stream:\r\n      bindings:\r\n        receiveConsumer-in-0:\r\n          destination: message.exchange\r\n          group: huongdanjava\r\n<\/pre>\n<p>Trong ph\u1ea7n unit test, ch\u00fang ta s\u1ebd ingest bean c\u1ee7a class InputDestination, g\u1eedi message t\u1edbi destination v\u00e0 assert k\u1ebft qu\u1ea3 nh\u01b0 sau:<\/p>\n<pre class=\"lang:java decode:true \">package com.huongdanjava.springcloudstream;\r\n\r\nimport static org.junit.jupiter.api.Assertions.assertEquals;\r\n\r\nimport org.junit.jupiter.api.Test;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\n\r\nimport org.springframework.boot.test.context.SpringBootTest;\r\nimport org.springframework.cloud.stream.binder.test.EnableTestBinder;\r\nimport org.springframework.cloud.stream.binder.test.InputDestination;\r\nimport org.springframework.messaging.support.MessageBuilder;\r\n\r\n@SpringBootTest\r\n@EnableTestBinder\r\nclass SpringCloudStreamRabbitmqExampleApplicationTests {\r\n\r\n  @Autowired\r\n  private InputDestination inputDestination;\r\n\r\n  @Autowired\r\n  private MessageStore store;\r\n\r\n  @Test\r\n  void testInputDestination() {\r\n    String testMessage = \"Test Message\";\r\n    var message = MessageBuilder.withPayload(testMessage)\r\n        .build();\r\n\r\n    inputDestination.send(message, \"message.exchange\");\r\n\r\n    assertEquals(testMessage, store.getLastMessage());\r\n  }\r\n\r\n}\r\n<\/pre>\n<p>Ph\u01b0\u01a1ng th\u1ee9c send() c\u1ee7a class InputDestination c\u00f3 2 tham s\u1ed1. Tham s\u1ed1 \u0111\u1ea7u ti\u00ean l\u00e0 message m\u00e0 ch\u00fang ta mu\u1ed1n g\u1eedi, c\u00f2n tham s\u1ed1 th\u1ee9 hai l\u00e0 t\u00ean c\u1ee7a Exchange trong RabbitMQ ho\u1eb7c l\u00e0 t\u00ean c\u1ee7a Topic trong Apache Kafka m\u00e0 \u1ee9ng d\u1ee5ng s\u1ebd nh\u1eadn message, c\u00e1c b\u1ea1n nh\u00e9! Class InputDestination n\u00e0y c\u00f2n c\u00f3 1 v\u00e0i ph\u01b0\u01a1ng th\u1ee9c send() kh\u00e1c nh\u01b0ng m\u00ecnh recommend c\u00e1c b\u1ea1n s\u1eed d\u1ee5ng ph\u01b0\u01a1ng th\u1ee9c send() c\u00f3 2 tham s\u1ed1 nh\u01b0 tr\u00ean, \u0111\u1ec3 test ch\u00fang ta c\u00f3 th\u1ec3 work trong b\u1ea5t k\u1ef3 tr\u01b0\u1eddng h\u1ee3p n\u00e0o.<\/p>\n<p>C\u00e1c b\u1ea1n ch\u1ea1y test n\u00e0y, c\u00e1c b\u1ea1n s\u1ebd th\u1ea5y k\u1ebft qu\u1ea3 pass nh\u01b0 sau:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-25210 aligncenter\" src=\"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/06\/unit-testing-voi-spring-cloud-stream-1.png\" alt=\"\" width=\"700\" height=\"405\" \/><\/p>\n<h3>OutputDestination<\/h3>\n<p>Class OutputDestination s\u1ebd simulate vi\u1ec7c g\u1eedi message t\u1eeb \u1ee9ng d\u1ee5ng t\u1edbi message broker.<\/p>\n<p>\u0110\u1ec3 l\u00e0m v\u00ed d\u1ee5, c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecbnh ngh\u0129a m\u1ed9t bean c\u1ee7a interface Supplier nh\u01b0 m\u00ecnh \u0111\u00e3 l\u00e0m trong <a href=\"https:\/\/huongdanjava.com\/vi\/gioi-thieu-ve-spring-cloud-stream.html\" target=\"_blank\" rel=\"noopener\">b\u00e0i vi\u1ebft tr\u01b0\u1edbc<\/a> nh\u01b0 sau:<\/p>\n<pre class=\"lang:java decode:true \">@Bean\r\npublic Supplier&lt;String&gt; sendSupplier() {\r\n  return () -&gt; \"Hello World\";\r\n}<\/pre>\n<p>\u0110\u1ecbnh ngh\u0129a binding cho n\u00f3:<\/p>\n<pre class=\"lang:yaml decode:true \">spring:\r\n  cloud:\r\n    function:\r\n      definition: receiveConsumer;sendSupplier\r\n    stream:\r\n      bindings:\r\n        receiveConsumer-in-0:\r\n          destination: message.exchange\r\n          group: huongdanjava\r\n        sendSupplier-out-0:\r\n          destination: message.exchange\r\n<\/pre>\n<p>V\u00e0 c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 vi\u1ebft test s\u1eed d\u1ee5ng class OutputDestination nh\u01b0 sau:<\/p>\n<pre class=\"lang:java decode:true \">package com.huongdanjava.springcloudstream;\r\n\r\nimport static org.junit.jupiter.api.Assertions.assertEquals;\r\nimport static org.junit.jupiter.api.Assertions.assertNotNull;\r\nimport static org.junit.jupiter.api.Assertions.assertTrue;\r\n\r\nimport org.junit.jupiter.api.Test;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.boot.test.context.SpringBootTest;\r\nimport org.springframework.cloud.stream.binder.test.EnableTestBinder;\r\nimport org.springframework.cloud.stream.binder.test.InputDestination;\r\nimport org.springframework.cloud.stream.binder.test.OutputDestination;\r\nimport org.springframework.messaging.support.MessageBuilder;\r\n\r\n@SpringBootTest\r\n@EnableTestBinder\r\nclass SpringCloudStreamRabbitmqExampleApplicationTests {\r\n\r\n  @Autowired\r\n  private InputDestination inputDestination;\r\n\r\n  @Autowired\r\n  private OutputDestination outputDestination;\r\n\r\n  @Autowired\r\n  private MessageStore store;\r\n\r\n  @Test\r\n  void testInputDestination() {\r\n    String testMessage = \"Test Message\";\r\n    var message = MessageBuilder.withPayload(testMessage)\r\n        .build();\r\n\r\n    inputDestination.send(message, \"message.exchange\");\r\n\r\n    assertEquals(testMessage, store.getLastMessage());\r\n  }\r\n\r\n  @Test\r\n  void testOutputDestination() {\r\n    var response = outputDestination.receive(100, \"message.exchange\");\r\n    assertNotNull(response);\r\n    assertTrue(response.getPayload().length &gt; 0);\r\n\r\n    assertEquals(\"Hello World\", new String(response.getPayload()));\r\n  }\r\n\r\n}\r\n<\/pre>\n<p>Ph\u01b0\u01a1ng th\u1ee9c receive() c\u1ee7a class OutputDestination c\u00f3 2 tham s\u1ed1 l\u00e0 timeout v\u00e0 t\u00ean c\u1ee7a Exchange ho\u1eb7c Topic s\u1ebd nh\u1eadn message. T\u01b0\u01a1ng t\u1ef1 nh\u01b0 class InputDestination, class OutputDestination n\u00e0y c\u0169ng c\u00f3 1 v\u00e0i ph\u01b0\u01a1ng th\u1ee9c receive() kh\u00e1c nh\u01b0ng m\u00ecnh recommend c\u00e1c b\u1ea1n s\u1eed d\u1ee5ng ph\u01b0\u01a1ng th\u1ee9c receive() c\u00f3 2 tham s\u1ed1 nh\u01b0 tr\u00ean, \u0111\u1ec3 test ch\u00fang ta c\u00f3 th\u1ec3 work trong b\u1ea5t k\u1ef3 tr\u01b0\u1eddng h\u1ee3p n\u00e0o.<\/p>\n<p>K\u1ebft qu\u1ea3 khi ch\u1ea1y test n\u00e0y s\u1ebd nh\u01b0 sau:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-25211 aligncenter\" src=\"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/06\/unit-testing-voi-spring-cloud-stream-2.png\" alt=\"\" width=\"700\" height=\"448\" \/><\/p>\n<p>Nh\u01b0 v\u1eady l\u00e0 trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh \u0111\u00e3 h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch s\u1eed d\u1ee5ng 2 class l\u00e0 InputDestination v\u00e0 OutputDestination \u0111\u1ec3 vi\u1ebft unit test trong c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream. Vi\u1ec7c kh\u00f4ng ph\u1ea3i g\u1ecdi t\u1edbi external message broker khi ch\u1ea1y unit test s\u1ebd gi\u00fap \u00edch cho ch\u00fang ta r\u1ea5t nhi\u1ec1u \u0111\u00f3 c\u00e1c b\u1ea1n!<\/p>\n<p><strong>C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 xem th\u00eam video \u1edf \u0111\u00e2y:<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"Spring Cloud Stream Unit Testing with Test Binder | InputDestination &amp; OutputDestination Tutorial\" width=\"825\" height=\"619\" src=\"https:\/\/www.youtube.com\/embed\/ftl6CtOs39c?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-right kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;right&quot;,&quot;id&quot;:&quot;25201&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;4&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;0\\\/5 - (0 votes)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;title&quot;:&quot;Unit testing v\u1edbi Spring Cloud Stream&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 4px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Spring Cloud Stream cung c\u1ea5p cho ch\u00fang ta dependency spring-cloud-stream-test-binder, gi\u00fap ch\u00fang ta c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng vi\u1ebft unit test cho c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i g\u1ecdi t\u1edbi c\u00e1c message broker th\u1eadt. C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 khai&hellip; <a href=\"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":25085,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2550],"tags":[],"class_list":["post-25201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spring-cloud-stream","clearfix"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Unit testing v\u1edbi Spring Cloud Stream - Huong Dan Java<\/title>\n<meta name=\"description\" content=\"Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch vi\u1ebft unit test v\u1edbi c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unit testing v\u1edbi Spring Cloud Stream - Huong Dan Java\" \/>\n<meta property=\"og:description\" content=\"Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch vi\u1ebft unit test v\u1edbi c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html\" \/>\n<meta property=\"og:site_name\" content=\"Huong Dan Java\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/nhkhanh2406\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/nhkhanh2406\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-02T23:08:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-02T23:08:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/04\/spring-cloud.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Khanh Nguyen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/KhanhNguyenJ\" \/>\n<meta name=\"twitter:site\" content=\"@KhanhNguyenJ\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Khanh Nguyen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html\"},\"author\":{\"name\":\"Khanh Nguyen\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/#\\\/schema\\\/person\\\/dc859d7f8cbea3b593e6738de9cbb82d\"},\"headline\":\"Unit testing v\u1edbi Spring Cloud Stream\",\"datePublished\":\"2026-06-02T23:08:42+00:00\",\"dateModified\":\"2026-06-02T23:08:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html\"},\"wordCount\":805,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/#\\\/schema\\\/person\\\/dc859d7f8cbea3b593e6738de9cbb82d\"},\"image\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/spring-cloud.jpg\",\"articleSection\":[\"Spring Cloud Stream\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html\",\"url\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html\",\"name\":\"Unit testing v\u1edbi Spring Cloud Stream - Huong Dan Java\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/spring-cloud.jpg\",\"datePublished\":\"2026-06-02T23:08:42+00:00\",\"dateModified\":\"2026-06-02T23:08:56+00:00\",\"description\":\"Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch vi\u1ebft unit test v\u1edbi c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#primaryimage\",\"url\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/spring-cloud.jpg\",\"contentUrl\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/spring-cloud.jpg\",\"width\":400,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/vi\\\/unit-testing-voi-spring-cloud-stream.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/huongdanjava.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unit testing v\u1edbi Spring Cloud Stream\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/#website\",\"url\":\"https:\\\/\\\/huongdanjava.com\\\/\",\"name\":\"Huong Dan Java\",\"description\":\"Java development tutorials\",\"publisher\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/#\\\/schema\\\/person\\\/dc859d7f8cbea3b593e6738de9cbb82d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/huongdanjava.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/#\\\/schema\\\/person\\\/dc859d7f8cbea3b593e6738de9cbb82d\",\"name\":\"Khanh Nguyen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2021\\\/07\\\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg\",\"url\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2021\\\/07\\\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg\",\"contentUrl\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2021\\\/07\\\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg\",\"width\":1267,\"height\":1517,\"caption\":\"Khanh Nguyen\"},\"logo\":{\"@id\":\"https:\\\/\\\/huongdanjava.com\\\/wp-content\\\/uploads\\\/2021\\\/07\\\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg\"},\"description\":\"I love Java and everything related to Java.\",\"sameAs\":[\"https:\\\/\\\/huongdanjava.com\",\"https:\\\/\\\/www.facebook.com\\\/nhkhanh2406\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/KhanhNguyenJ\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Unit testing v\u1edbi Spring Cloud Stream - Huong Dan Java","description":"Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch vi\u1ebft unit test v\u1edbi c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html","og_locale":"en_US","og_type":"article","og_title":"Unit testing v\u1edbi Spring Cloud Stream - Huong Dan Java","og_description":"Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch vi\u1ebft unit test v\u1edbi c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream.","og_url":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html","og_site_name":"Huong Dan Java","article_publisher":"https:\/\/www.facebook.com\/nhkhanh2406","article_author":"https:\/\/www.facebook.com\/nhkhanh2406","article_published_time":"2026-06-02T23:08:42+00:00","article_modified_time":"2026-06-02T23:08:56+00:00","og_image":[{"width":400,"height":400,"url":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/04\/spring-cloud.jpg","type":"image\/jpeg"}],"author":"Khanh Nguyen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/KhanhNguyenJ","twitter_site":"@KhanhNguyenJ","twitter_misc":{"Written by":"Khanh Nguyen","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#article","isPartOf":{"@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html"},"author":{"name":"Khanh Nguyen","@id":"https:\/\/huongdanjava.com\/#\/schema\/person\/dc859d7f8cbea3b593e6738de9cbb82d"},"headline":"Unit testing v\u1edbi Spring Cloud Stream","datePublished":"2026-06-02T23:08:42+00:00","dateModified":"2026-06-02T23:08:56+00:00","mainEntityOfPage":{"@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html"},"wordCount":805,"commentCount":0,"publisher":{"@id":"https:\/\/huongdanjava.com\/#\/schema\/person\/dc859d7f8cbea3b593e6738de9cbb82d"},"image":{"@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#primaryimage"},"thumbnailUrl":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/04\/spring-cloud.jpg","articleSection":["Spring Cloud Stream"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html","url":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html","name":"Unit testing v\u1edbi Spring Cloud Stream - Huong Dan Java","isPartOf":{"@id":"https:\/\/huongdanjava.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#primaryimage"},"image":{"@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#primaryimage"},"thumbnailUrl":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/04\/spring-cloud.jpg","datePublished":"2026-06-02T23:08:42+00:00","dateModified":"2026-06-02T23:08:56+00:00","description":"Trong b\u00e0i vi\u1ebft n\u00e0y, m\u00ecnh h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch vi\u1ebft unit test v\u1edbi c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 s\u1eed d\u1ee5ng Spring Cloud Stream.","breadcrumb":{"@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#primaryimage","url":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/04\/spring-cloud.jpg","contentUrl":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2026\/04\/spring-cloud.jpg","width":400,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/huongdanjava.com\/vi\/unit-testing-voi-spring-cloud-stream.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/huongdanjava.com\/"},{"@type":"ListItem","position":2,"name":"Unit testing v\u1edbi Spring Cloud Stream"}]},{"@type":"WebSite","@id":"https:\/\/huongdanjava.com\/#website","url":"https:\/\/huongdanjava.com\/","name":"Huong Dan Java","description":"Java development tutorials","publisher":{"@id":"https:\/\/huongdanjava.com\/#\/schema\/person\/dc859d7f8cbea3b593e6738de9cbb82d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/huongdanjava.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/huongdanjava.com\/#\/schema\/person\/dc859d7f8cbea3b593e6738de9cbb82d","name":"Khanh Nguyen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2021\/07\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg","url":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2021\/07\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg","contentUrl":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2021\/07\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg","width":1267,"height":1517,"caption":"Khanh Nguyen"},"logo":{"@id":"https:\/\/huongdanjava.com\/wp-content\/uploads\/2021\/07\/CC6FAC58-D227-4DD8-93D1-6D6A795577E3_1_201_a.jpeg"},"description":"I love Java and everything related to Java.","sameAs":["https:\/\/huongdanjava.com","https:\/\/www.facebook.com\/nhkhanh2406","https:\/\/x.com\/https:\/\/twitter.com\/KhanhNguyenJ"]}]}},"_links":{"self":[{"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/posts\/25201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/comments?post=25201"}],"version-history":[{"count":6,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/posts\/25201\/revisions"}],"predecessor-version":[{"id":25236,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/posts\/25201\/revisions\/25236"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/media\/25085"}],"wp:attachment":[{"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/media?parent=25201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/categories?post=25201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/huongdanjava.com\/wp-json\/wp\/v2\/tags?post=25201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}