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

Lateinit variable is not initialized in TestNG's @BeforeSuite

我正尝试在 @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) 在测试开始前 运行ning(我看到打印的输出),但是当方法 test_01() 正在尝试时我遇到了错误使用 driver 变量:

kotlin.UninitializedPropertyAccessException: lateinit property driver has not been initialized

它在 @BeforeClass 中工作得很好,但我想 运行 每个套件只初始化一次,而不是每个 class...

有什么解决办法吗?

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

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