使用PowerMock模拟私有方法

时间:2018-05-09 09:55:57

标签: java android unit-testing mockito powermockito

我试图测试下一个方法:

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

调用privateMethod:

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)中有例外说

  

方法抛出&#39; org.mockito.exceptions.misusing.UnfinishedStubbingException&#39;例外。无法评估android.os.AsyncTask $ MockitoMock $ 1952591544.toString()

现在我已经没有关于如何模仿这个对象的想法。

0 个答案:

没有答案