Я пытаюсь имитировать класс 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>>> {
...
}
}
Я рассмотрел несколько других подобных вопросов, но ни один из них не помог:
- Ошибка имитирующего класса, содержащего ссылку на SQLiteOpenHelper
- Моделирование финального класса в java с использованием библиотеки mockito — у меня было много проблем с импортом PowerMock
-
Как смоделировать окончательный класс с помощью mockito - я добавил зависимость и создал файл со строкой
mock-maker-inline
, как это было предложено в ответах, я все еще получаю ту же ошибку. Я также попробовал ответ, который предлагалMockito.mock(SomeMockableType.class,AdditionalAnswers.delegatesTo(someInstanceThatIsNotMockableOrSpyable))
, но это дало мне ошибку «Недостаточно информации для вывода переменной типа T» - Моделирование финального занятия с Mockito 2
- Mockito не может издеваться/шпионить, потому что: Final Class
- Невозможно имитировать/шпионить класс java.util.Optional
Привет, ты видел мой ответ?