我有以下出版类。
@Component
public class Publisher {
@Autowired
private MessageChannel publishingChannel;
@Override
public void publish(Event event) {
publishingChannel.send(event);
}
}
我有下面的测试类。
@RunWith(SpringRunner.class)
@SpringBootTest
public class PublisherTest {
private final List<Event> events = new ArrayList<>();
@Autowired
private Publisher publisher;
@Test
public void testPublish() {
Event testEvent = new Event("some_id_number");
publisher.publish(testEvent);
Awaitility.await()
.atMost(2, TimeUnit.SECONDS)
.until(() -> !this.events.isEmpty());
}
@ServiceActivator(inputChannel = "publishingChannel")
public void publishEventListener(Event event) {
this.events.add(event);
}
}
消息通道bean在其他地方被示例化。发布者按预期运行,并且事件被发布到通道,但是服务激活器从未被调用。我在这里遗漏了什么?
1条答案
按热度按时间7tofc5zh1#
事实证明,您需要将服务激活器移动到一个单独的测试组件类(
@TestComponent
防止它被注入到测试上下文之外)。然后,您可以将此侦听器引入到您的测试中。确保使用
@Import
将服务激活器类引入到测试上下文中。在做出这些更改后,测试通过。用一个演示应用程序解决了这个问题,并将其应用于生产测试问题。