gpt4 book ai didi

Android Mockito kotlin.UninitializedPropertyAccessException : lateinit property dataManager has not been initialized

转载 作者:行者123 更新时间:2023-12-02 12:22:25 25 4
gpt4 key购买 nike

我不断得到kotlin.UninitializedPropertyAccessException: lateinit property xxx has not been initialized在我的 Mockito 测试中。但该应用程序运行良好。注意:我不想将演示者注入(inject) Activity 。提前致谢!

这是我的 Activity :

class CreateAccountActivity : AppCompatActivity(), CreateAccountView {

private var presenter: CreateAccountPresenter? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_create_account)
presenter = CreateAccountPresenter()
((application) as CariumApp).getDaggerComponent().inject(presenter!!)

presenter?.attachView(this)
}

这是我的演示者:
class CreateAccountPresenter {
private var view: CreateAccountView? = null

@Inject
lateinit var dataManager: DataManager

fun attachView(view: CreateAccountView) {
this.view = view

dataManager.getServiceDocuments(true, object : GetServiceDocumentsListener {
// ...
})
}

这是我的数据管理器:
interface DataManager {
fun getServiceDocuments(latest: Boolean, listener: GetServiceDocumentsListener)
}

和 AppDataManager:
Singleton
class AppDataManager @Inject constructor(context: Context) : DataManager {
// ...
}

最后我的测试失败了:
class CreateAccountPresenterTest {

val mockDataManager: DataManager = mock()

val mockCreateAccountView: CreateAccountView = mock()

private val createAccountPresenter = CreateAccountPresenter()

@Test
fun getServiceDocuments() {
doAnswer {
val args = it.arguments
(args[1] as GetServiceDocumentsListener).onError()
null
}.`when`(mockDataManager).getServiceDocuments(Mockito.anyBoolean(), anyOrNull())

createAccountPresenter.attachView(mockCreateAccountView)

verify(mockCreateAccountView).hideLoadingDialog()
}
}

毕业文件:
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.22.0'
testImplementation "org.mockito:mockito-inline:2.22.0"
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.0.0-RC1"
implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'

我的模块类:
@Module
open class MyModule(private var context: Context) {

@Provides
open fun provideContext(): Context {
return context
}

@Provides
@Singleton
internal fun provideDataManager(appDataManager: AppDataManager): DataManager {
return appDataManager
}
}

实际错误为 kotlin.UninitializedPropertyAccessException:lateinit 属性数据管理器尚未初始化

最佳答案

您没有将模拟分配给该字段。在您的测试方法中分配它。调用前attachView()

createAccountPresenter.dataManager = mockDataManager

关于Android Mockito kotlin.UninitializedPropertyAccessException : lateinit property dataManager has not been initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com