Тестирование Android Presenter IllegalStateException captor.capture () не должно быть нулевым - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть простое приложение, основанное на MVP.Написать тест для докладчика.Используется Mockito для ложных данных.Я ловлю просмотр данных обратного вызова (ArrayList) с ArgumentCaptor.Мой тестовый класс

    @RunWith(MockitoJUnitRunner::class)
    class MainPresenterTest{

    @Mock
    lateinit var view:MainView

    @Mock
    lateinit var context:Context

    @InjectMocks
    lateinit var presenter: MainPresenter

    @Captor
    lateinit var captor: ArgumentCaptor<ArrayList<News>>

    @Before
    fun init(){
        MockitoAnnotations.initMocks(this)
    }

    @Test
    fun success(){
    presenter.loadNews()
    Mockito.verify<MainView>(view).onSuccess(captor.capture())
    var data =  captor.value
    Mockito.verify(view).onSuccess(data)
    Mockito.verify(view,never()).onError("")
        }
    }

Главный вид

interface MainView{
    fun onSuccess(n:ArrayList<News>)
    fun onError(e:String)
}

Но бросить

java.lang.IllegalStateException: captor.capture() must not be null
Example of correct verification:
    verify(mock).doSomething()

Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.

1 Ответ

0 голосов
/ 09 апреля 2019

На самом деле вам не нужно определять его как переменную класса lateinit.В вашем тестовом методе определите переменную метода, подобную этой:

 @Test
    fun success(){
    presenter.loadNews()
    val captor: ArgumentCaptor<ArrayList<*>> = ArgumentCaptor.forClass(ArrayList::class.java)
    Mockito.verify<MainView>(view).onSuccess(captor.capture())
    var data =  captor.value
    Mockito.verify(view).onSuccess(data)
    Mockito.verify(view,never()).onError("")
        }
    }

Кроме того, вы должны получить данные от захватчика.Вместо этого

 Mockito.verify(view).onSuccess(data)

сделайте что-то вроде этого

assertEquals("x", data.size())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...