Lateinit 变量未在 TestNG 的 @BeforeSuite 中初始化

Posted

技术标签:

【中文标题】Lateinit 变量未在 TestNG 的 @BeforeSuite 中初始化【英文标题】:Lateinit variable is not initialized in TestNG's @BeforeSuite 【发布时间】:2021-12-11 16:54:26 【问题描述】:

我正在尝试在 @BeforeSuite 方法中为我的 testNG 测试延迟初始化变量(AppiumDriver 服务),如下所示:

abstract class BaseTest 

    lateinit var driver: AppiumDriver<MobileElement>

    @Parameters("platform")
    @BeforeSuite(alwaysRun = true)
    fun init(platform: String) 
        Configuration.isios = platform.lowercase() == "ios"
        driver = <driver initialization>
        println(driver)
    

我的测试如下所示:

class MedicationsTests : BaseTest() 
    fun test_01() 
        // Test using `driver` variable
    

@BeforeSuite 方法 init(String) 在测试开始之前运行(我看到了打印输出),但是当方法 test_01() 尝试使用 driver 变量时,我遇到了错误:

kotlin.UninitializedPropertyAccessException: lateinit property driver has not been initialized

它在 @BeforeClass 中工作得非常好,但我只想在整个套件中运行一次此初始化,而不是每个班级一次...

有什么办法解决吗?

【问题讨论】:

【参考方案1】:

TestNG 将为您每次测试创建一个新的 BaseTest 类实例。 如果您想共享您的驱动程序 - 将其设为静态。示例:

abstract class BaseTest 
    companion object 
        lateinit var driver: AppiumDriver<MobileElement>
    

【讨论】:

这解决了我的问题,非常感谢

以上是关于Lateinit 变量未在 TestNG 的 @BeforeSuite 中初始化的主要内容,如果未能解决你的问题,请参考以下文章

如何检查“lateinit”变量是否已初始化?

如何检查“lateinit”变量是不是已初始化?

lateinit by lazy

Kotlin使用技巧之lateinit修饰符

Android开发Kotlin检查lateinit变量是否已初始化的方法

Kotlin - lateinit VS 任何? =空