【发布时间】:2021-09-13 21:38:24
【问题描述】:
我正在尝试在仪器测试中模拟 SQLiteOpenHelper 类,因此每当任何片段尝试从数据库中获取信息时,它都会返回一个通用结果。但是,我不断收到一条错误消息:
org.mockito.exceptions.base.MockitoException:无法模拟/监视类 com.example.cleaningschedule.helpers.DatabaseHandler Mockito 不能 模拟/间谍,因为:
- 最后一课 在 com.example.cleaningschedule.ToDoListInstrumentedTest.oneTask(ToDoListInstrumentedTest.kt:81)
测试类是:
@RunWith(AndroidJUnit4::class)
class ToDoListInstrumentedTest {
@Rule
@JvmField var activityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
private fun getActivity() = activityRule.activity
@After
fun tearDown() {
InstrumentationRegistry.getInstrumentation().getTargetContext().deleteDatabase("TaskDatabase")
}
@Test
fun oneTask() {
val mock = mock(DatabaseHandler::class.java)
`when`(mock.getTasks()).thenThrow()
onView(withId(R.id.taskName)).check(matches(isDisplayed()))
}
}
我要模拟的类是:
class DatabaseHandler(context: Context): SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
companion object {
private const val DATABASE_VERSION = 5
private const val DATABASE_NAME = "TaskDatabase"
...
}
override fun onCreate(db: SQLiteDatabase?) {
...
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
...
}
fun getTasks(): MutableList<Pair<MutableList<String>, MutableList<Room>>> {
...
}
}
我查看了其他几个类似的问题,但没有一个有帮助:
- Error mocking Class which hold reference to SQLiteOpenHelper
- Mock final class in java using mockito library - 我在导入 PowerMock 时遇到了很多问题
-
How to mock a final class with mockito - 我已经添加了依赖项并使用
mock-maker-inline行创建了文件,正如答案中所建议的那样,我仍然得到同样的错误。我还尝试了建议Mockito.mock(SomeMockableType.class,AdditionalAnswers.delegatesTo(someInstanceThatIsNotMockableOrSpyable))的答案,但这给了我一个“没有足够的信息来推断类型变量 T”错误 - Mock final class with Mockito 2
- Mockito cannot mock/spy because : Final Class
- Cannot mock/spy class java.util.Optional
【问题讨论】:
-
嗨,你看到我的回答了吗?
标签: kotlin mocking mockito instrumented-test