Как внедрить в ViewModel , если я пишу тесты.Я получаю ошибку UninitializedPropertyAccessException: lateinit property getAll has not been initialized
.Я хотел бы проверить выборку данных из удаленного API.Я новичок в написании модульных тестов, поэтому я хочу узнать, как написать его в этом случае.
class MainViewModel @Inject constructor(
private val commandProcessor: CommandProcessor,
private val app: Application
) : AndroidViewModel(app), CoroutineScope {
var job: Job = Job()
override val coroutineContext: CoroutineContext
get() = Dispatchers.IO + job
private var notesList: LiveData<List<Note>>? = null
private var editedNote: LiveData<Note>? = null
@Inject lateinit var getAll: GetNotes
@Inject lateinit var add: AddNote
private fun fetchNotes() {
getAll.execute()
notesList = getAll.result
}
fun getNotes(): LiveData<List<Note>>? {
if (notesList == null) fetchNotes()
return notesList
}
override fun onCleared() {
super.onCleared()
job.cancel()
val commands = arrayListOf(getAll, add, delete, getSingle, edit)
commands.forEach { it.cancelJob() }
}
}
Тестовый образец:
@RunWith(MockitoJUnitRunner::class)
class MainViewModelTest {
private lateinit var viewModel: MainViewModel
val app: Application = mock()
@Inject lateinit var getAllMock: GetNotes
@Before
fun setUp() {
viewModel = MainViewModel(CommandProcessor(), app)
Mockito.`when`(viewModel.getAll).thenReturn(getAllMock)
}
@Test
fun testGetNotes() {
val livedata = MutableLiveData<List<Note>>()
Mockito.`when`(getAllMock.result).thenReturn(livedata)
assert(viewModel.getNotes() is LiveData<List<Note>>)
}
}