Итак, у меня очень простой класс с тремя открытыми методами. На вызовы другого, который возвращает Boolean
. Класс выглядит следующим образом:
open class DataManager(var context: Context) {
fun startDataManager(){
if(checkFileExists()){
startTask()
}
}
fun checkFileExists(): Boolean {
val mFile: File = context.getDatabasePath("FILE_NAME")
return mFile.exists()
}
fun startTask(){
//TODO Task here
}
}
Итак, смысл в том, чтобы проверить, вызывается ли метод checkFileExists
при вызове метода startDataManager
извне. Вот как я пытался все смоделировать:
@Test
fun checkFileExists_onDataManagerStart(){
val dataManagerMock = mock(DataManager::class.java)
`when`(dataManagerMock.checkFileExists()).thenReturn(true)
dataManagerMock.startDataManager()
verify(dataManagerMock, times(1)).checkFileExists()
}
Поэтому, когда я запускаю этот тест, я получаю сообщение об ошибке context
внутри checkFileExists()
метода null
, и он не может проверитьесли настоящий файл существует.
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference at
.data.DataManager.checkFileExists(DataManager.kt:20)
Что касается моего понимания Мокито, то, когда я издеваюсь над своим классом, оно также должно издеваться над методами. Затем я заставляю return true
для метода, который я хочу проверить, поэтому, когда я вызываю его, он не должен запускать реальный код в этом методе. Это правильно? Что мне там не хватает?
Если это возможно, я бы предпочел не использовать какую-либо другую библиотеку (обертку) для Mockito. У меня есть некоторые ограничения на использование библиотеки.
Заранее спасибо.