问题:
在运行同时发布事件的多个集成测试后,InMemoryConnector.clear()不起作用。
我的实现
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@QuarkusTest
@QuarkusTestResource(
value = InMemReactiveMessagingLifecycleManager::class, initArgs = [
ResourceArg(value = "incoming", name = "example-processed"),
ResourceArg(value = "outgoing", name = "example")
]
)
class DemoEventProducerTest {
@Inject
lateinit var demoEventProducer: demoEventProducer
@Inject
@Any
lateinit var inMemoryConnector: InMemoryConnector
@Inject
lateinit var testHelper: TestHelper
@Test
fun `publishEvent - valid action - event published`() {
demoEventProducer.publish()
val eventQueue = inMemoryConnector.sink<String>("example")
//event queue contains other events that has been published
}
}
个字符
预期行为:
val eventQueue = inMemoryConnector.sink<String>("example")
型
我想在这个测试运行之前清理队列,这样我就只会有这个测试产生的一个事件。
我尝试使用@BeforeEach @ AfterEach,以便在执行测试方法之前,我希望队列被清理。但它不起作用。
1条答案
按热度按时间bxgwgixi1#
默认情况下,测试资源是全局的。在测试期间,应用程序只启动一次(在所有测试之前),除非有必要(例如,测试使用不同的测试配置文件),否则不会重新启动。这是因为生命周期管理器的
stop()
方法将在正常关闭阶段被调用。此外,
InMemoryConnector.clear()
不会清除通道/消息。它只是将连接器名称切换回原始值。要清除接收器的消息,您应该在每次测试后调用接收器对象上的clear()
方法,如下所示:字符串