如何在 TestNG 中与 guice 共享同一个依赖注入容器

How to share the same dependency injection container in TestNG with guice

I 运行 多个 TestNG 7.4.0 套件并行使用类似(遵循 kotlin 代码,但在 java, 没有语言依赖):

    val testNG = TestNG()
    with(testNG) {
        setXmlSuites(allMyXmlSuites)
        suiteThreadPoolSize = threadCount
    }
    LISTENERS.forEach { testNG.addListener(it) }
    testNG.run()

在我的套件中,我这样配置父模块

suite.parentModule = SuiteParentModule::class.java.name

我的问题是,在 SuiteParentModule 内部,我有一个被多次调用的单例,恰好是套件调用的次数。所以我猜每个套件都有一个独立的 Injector 实例。这里记录多次的提供者方法:

@Provides
@Singleton
fun provideEnvironmentUrls(): EnvironmentUrls =
    EnvironmentUrls(
        System.getProperty("url")
    ).also { logger.info("Using default $it") }

有没有办法确保TestNg使用Guice提供的依赖注入容器保持不变,从而提供真正的单例?

我发现,即使使用 TestNG.setParentModule(),多个套件也会有多个注入器。

通过将我的代码移到一个套件中,我设法只创建了一个注入器。

可在 the issue opened in the TestNG git 获得更多信息。