Kafka 当同时运行多个集成测试时,SmallRye InMemoryConnector().clean不工作

9cbw7uwe  于 2023-11-16  发布在  Apache
关注(0)|答案(1)|浏览(108)

问题:

在运行同时发布事件的多个集成测试后,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,以便在执行测试方法之前,我希望队列被清理。但它不起作用。

bxgwgixi

bxgwgixi1#

默认情况下,测试资源是全局的。在测试期间,应用程序只启动一次(在所有测试之前),除非有必要(例如,测试使用不同的测试配置文件),否则不会重新启动。这是因为生命周期管理器的stop()方法将在正常关闭阶段被调用。
此外,InMemoryConnector.clear()不会清除通道/消息。它只是将连接器名称切换回原始值。要清除接收器的消息,您应该在每次测试后调用接收器对象上的clear()方法,如下所示:

inMemoryConnector.sink<String>("example").clear();

字符串

相关问题