我有ContentResolver
使用fragment
注入我的Dagger2
。我想在浓缩咖啡中嘲笑这个,所以在我的测试中我会这样做:
1:在课堂上模拟它作为外部变量
@Mock val mockContentResolver = MockContentResolver()
或
2:在方法中模拟它
@Test
fun testContentResolver() {
val contentResolver = mock(ContentResolver::class.java)
}
或者我完全错了,还有另一种正确模拟ContentResolver
答案 0 :(得分:0)
你在这里“双击”你的val:
@Mock val mockContentResolver = MockContentResolver()
要么去
@Mock lateinit var mockContentResolver: ContentResolver
在这种情况下,Mockito嘲笑你的领域。这也等同于您的第二种方法。另一种可能性是:
val mockContentResolver = MockContentResolver()
指定android测试包的模拟实现。这与Mockito版本完全不同。 Mockito嘲弄你的对象,而MockContentResolver
是ContentResolver
类的(或多或少是空的)实现。
我认为这取决于你想要实现的目标。如果您想测试ContentResolver的哪些方法被调用,最好使用Mockito版本。如果您想模仿ContentResolver的某种行为,可以使用MockContentResolver
变体。请记住,您必须在那里实现所有使用的方法。否则会抛出许多UnsupportedOperationExceptions
。