我试图在仪器化测试中模拟一个SQLiteOpenHelper类,因此每当任何片段试图从数据库获取信息时,它都会返回一个通用结果。但是,我一直收到一个错误:
com.example.cleaningschedule.helpers.DatabaseHandler
org.mockito.exceptions.base.MockitoException:无法模拟/间谍类,因为:
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>>> {
...
}
}我看过其他几个类似的问题,但都没有帮助:
mock-maker-inline行的文件,如“答案”中所建议的那样,我仍然得到了相同的错误。我还尝试了建议error的答案,但这给了我一个“不足以推断变量T‘的信息”
发布于 2021-07-02 06:23:33
我要做一个界面:
public interface ContainerHandler {
MutableList<Pair<MutableList<String>, MutableList<Room>>> getTasks();
}然后,我让DatabaseHandler继承这个接口,用接口调用Mockito的模拟函数。
val mock = mock(ContainerHandler::class.java)
`when`(mock.getTasks()).thenThrow()最后,我将我的模拟注入到测试类中。
https://stackoverflow.com/questions/68216607
复制相似问题