Макет метода `AsyncTask.executeOnExecutor` - PullRequest
0 голосов
/ 05 августа 2020

У меня есть метод, который использует AsyncTask.executeOnExecutor(), но когда я пытаюсь имитировать объект и вызывать executeOnExecutor(), я получаю сообщение об ошибке:

Метод executeOnExecutor в android .os.AsyncTask не издевались

Я использую Android SDK 28 и PowerMockito 2.0.7

Ниже показано, что я пытаюсь сделать:

public class FieldLoader extends AsyncTask<Void, Integer, List<Field>>
{
    private FieldDatabase fieldDatabase;

    public FieldLoader(FieldDatabase fieldDatabase) {
        super();
        this.fieldDatabase = fieldDatabase;
    }
}

public class ClassUnderTest
{
    public ClassUnderTest() {
        updateFields();
    }

    private void updateFields() {
        FieldLoader fieldLoader = new FieldLoader(Database.getInstance());
        fieldLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassUnderTest.class,
                 Database.class,
                 FieldLoader.class})
public class MyTests {
    @Test
    public void testFieldLoader() {
        Database mockDatabase = Mockito.mock(Database.class);
        PowerMockito.mockStatic(Database.class);
        PowerMockito.when(Database.getInstance()).thenReturn(mockDatabase);

        FieldLoader mockFieldLoader = Mockito.mock(FieldLoader.class);
        PowerMockito.whenNew(FieldLoader.class).withAnyArguments().thenReturn(mockFieldLoader);
        PowerMockito.when(mockFieldLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)).thenReturn(null);
        PowerMockito.when(mockFieldLoader.executeOnExecutor(Mockito.any(Executor.class), ArgumentMatchers.<Void>any())).thenReturn(null);

        ClassUnderTest cut = new ClassUnderTest();
    }
}

У меня есть пробовал множество способов имитировать executeOnExecutor, но не удалось.

Что мне нужно сделать, чтобы имитировать метод executeOnExecutor?

...