如何在 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 获得更多信息。
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 获得更多信息。