Насмешливый приватный метод с PowerMock - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь проверить следующий метод:

public void methodToTest() {
    // Other stuff
    privateMethod(false).execute(new Void[0]);
}

Который вызывает приватный метод:

private AsyncTask<Void, Void, CustomObject> privateMethod(final boolean renew) {
    AsyncTask<Void, Void, CustomObject> asyncTask = new AsyncTask<Void, Void, CustomObject>() {

        @Override
        protected CustomObject doInBackground(Void... params) {
            CustomObject custom = new CustomObject();

            return custom;
        }
        protected void onPostExecute(CustomObject custom) {
            //some code
        }
    };

Выполнение asyncTask невозможно выполнить в тесте с Mockito, поэтому мне нужно каким-то образом его смоделировать. Я пытался издеваться над приватным методом с PowerMock:

@Mock Context mockContext;
@Mock AsyncTask<Void, Void, CustomObject> mockAsyncTask;

@Test
public void methodTest() {
    ClassToTest objectToTest = new ClassToTest(mockContext);
    try {
        PowerMockito.doReturn(mockAsyncTask).when(objectToTest, "privateMethod", ArgumentMatchers.anyBoolean());
    objectToTest.methodToTest();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Это дает мне исключение в строке PowerMockito (NullPointerException), говорящее

Метод вызвал исключение org.mockito.exceptions.misusing.UnfinishedStubbingException. Невозможно оценить android.os.AsyncTask $ MockitoMock $ 1952591544.toString ()

Теперь у меня заканчиваются идеи о том, как издеваться над этим объектом.

1 Ответ

0 голосов
/ 10 мая 2018

Я наконец нашел ответ:

@Test
public void methodTest() {
    ClassToTest objectToTest = PowerMockito.spy(new ClassToTest());
    try {
        when(objectToTest, method(ClassToTest.class, "privateMethod", boolean.class)).withArguments(false).thenReturn(mockAsyncTask);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

А также непосредственно перед объявлением класса:

@PrepareForTest(ClassToTest.class)
...