Kotlin + Mockito: получить ноль
Пожалуйста, я немного запутался, этот тест не проходит с "java.lang.IllegalStateException: notNull() не должен быть нулевым":
@Test
fun when_resume_subscribe() {
// WHEN
presenter.onStart()
// THEN
verify<Model>(model).subscribe(notNull()) // <---- fails here
}
Вот тестируемый метод:
override fun onStart() {
model.subscribe(object : Observer<Bar> {
override fun onCompleted() {
view?.showProgress(false)
}
//... more stuff...
Пожалуйста, что происходит?
2 ответа
Решение
Это в основном включает Null Object в объект конкретного класса с использованием Generic. Код, приведенный ниже, где мы переопределяем any() для соответствующей обработки проблемы.
private fun <T> any(): T {
Mockito.any<T>()
return uninitialized()
}
private fun <T> uninitialized(): T = null as T
Для получения более подробной информации вы можете обратиться к этому учебнику https://medium.com/@elye.project/befriending-kotlin-and-mockito-1c2e7b0ef791.
С использованием
<dependency>
<groupId>org.mockito.kotlin</groupId>
<artifactId>mockito-kotlin</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
будет метод
Mockito.anyOrNull()
который не будет терпеть неудачу для аргументов, не допускающих значения NULL ...