gpt4 book ai didi

android - 如何在单元测试中测试AndroidViewModel

转载 作者:行者123 更新时间:2023-12-05 00:15:37 31 4
gpt4 key购买 nike

我正在尝试在单元测试(测试文件夹)中测试 ViewModel(AndroidViewModel 父级),但是在使用时

val application = ApplicationProvider.getApplicationContext<Application>()

它给我这个错误

java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.

示例单元测试

class ExampleUnitTest {
private lateinit var myAndroidViewModel: MyAndroidViewModel
private val app = ApplicationProvider.getApplicationContext<Application>()

@Before
fun init() {
myAndroidViewModel = MyAndroidViewModel(app)
}

@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}

构建.gradle

android {
testOptions {
unitTests.returnDefaultValues = true
}
}
dependencies {
testImplementation 'junit:junit:4.12'
testImplementation 'androidx.test:core-ktx:1.3.0'
}

如果我使用 robolectric,我不会再收到上述错误,但我觉得这不是一个好的选择,因为 robolectric 更适合 ui 测试。

我希望你能帮助我。谢谢。

最佳答案

对于单元测试,可能需要使用 @ActivityScoped 然后使用 @Inject constructor ...


但为了测试 ViewModel,我宁愿使用 androidx.hilt:hilt-lifecycle-viewmodel:

dependencies {
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'

// When using Kotlin.
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'

// When using Java.
annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}

然后可以@ViewModelInject:

class ExampleViewModel @ViewModelInject constructor(
private val repository: ExampleRepository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
...
}

参见 Hilt and Jetpack integrations .


这是另一个example使用 HiltMockK ,作者将其总结为:

Testing with Hilt, just @UninstallModules and then @BindValue.

关于android - 如何在单元测试中测试AndroidViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65571799/

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