Looper not mocked ViewModel MockitoJUnitRunner



我找不到可以帮助我测试ViewModel的解决方案。我一直在读,添加规则就足够了:

@get:Rule
var rule: TestRule = InstantTaskExecutorRule()

但我不断得到:

java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.

我的测试类现在看起来像这样:

@RunWith(MockitoJUnitRunner::class)
class MainActivityViewModelTest {
@get:Rule
val taskExecutorRule = InstantTaskExecutorRule()
val weatherProviderMock = mock<WeatherProvider>()
val sut = MainActivityViewModel(weatherProviderMock, mock(), mock(),     mock())
@Test
fun shouldPass() {
assertTrue(true)
}
}

我的应用程序build.gradle中也有以下内容:

testImplementation 'junit:junit:4.12'
testImplementation "android.arch.core:core-testing:1.1.1"
testImplementation 'org.mockito:mockito-core:2.22.0'
testImplementation 'org.assertj:assertj-core:3.9.1'
testImplementation 'com.nhaarman:mockito-kotlin:1.6.0'
testImplementation 'org.mockito:mockito-inline:2.22.0'

任何帮助非常感谢。

@Chris

您能否告诉我下面的代码是否有任何问题(根据您提出的解决方案(:

lateinit var sut: SummaryViewModel
@get:Rule
val rule: TestRule = InstantTaskExecutorRule()
@Before
fun setUp() {
sut = SummaryViewModel(calculatorMock, mock(), mock(), mock(), providerMock, mock())
}
@Test
fun `live data test`() {
val someLiveData = sut.someLiveDataValue
assertThat(true).isTrue()
}

您可以使用 Kotlin 委托延迟初始化ViewModel

val viewModel by lazy { 
MainActivityViewModel(weatherProviderMock, mock(), mock()...)
}

如果在我的情况下没有一个解决方案的工作方式不同,如果您使用的是更高版本的 Gradle 并且使用的是 androix,请确保在构建 gradle 中从androix导入。

实现 'androidx.arch.core:core-testing:$version'

而不是

实现 'android.arch.core:core-testing:$version'

相关内容

  • 没有找到相关文章

最新更新