Я хочу проверить метод, который выполняется в AsyncTask. Я уже издевался над всеми методами внутри. Что у меня есть -Обратный вызов Robolectric AsyncTask
- Статический метод, который получает все необходимые параметры и выполняет новую функцию AsyncTask(). ExecuteOnExecutor();
- В onPostExecute() Я вызываю обратный вызов с результатом.
Для теста я использую:
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.2.2"
testCompile "org.powermock:powermock-module-junit4:1.6.4"
testCompile "org.powermock:powermock-module-junit4-rule:1.6.4"
testCompile "org.powermock:powermock-api-mockito:1.6.4"
testCompile "org.powermock:powermock-classloading-xstream:1.6.4"
Но обратного вызова не вызывается. Пример:
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 24,
application = StubApplicationClass.class)
@PowerMockIgnore({"org.mockito.", "android.*"})
@PrepareForTest(BaseHttpClient.class)
@SuppressStaticInitializationFor("io.realm.internal.Util")
public class GetDataTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
....................................
@Test
public void getDataTest() throws Exception {
System.out.println("started");
BaseAsyncClient.doAsync(UserPublicDataTable, Actions,
list, new IHttpResponse<String>() {
@Override
public void httpResponse(@Nullable String response) {
assertNotNull(response); System.out.println("onPostExecute()");
}
});
System.out.println("finished");
}
onPostExecute - никогда не печатается.
Когда я зову:
Robolectric.flushBackgroundThreadScheduler();
я получаю исключение:
java.lang.NullPointerException
at org.robolectric.Robolectric.getBackgroundThreadScheduler(Robolectric.java:193)
at org.robolectric.Robolectric.flushBackgroundThreadScheduler(Robolectric.java:200)
Как я могу проверить AsyncTask с robolectric, powermock?
Update:
Как я вижу ShadowApplication.getInstance() == null
, поэтому я получаю NPE исключение, когда вызовы 'flushBackgroundThreadScheduler
.
Я создал custom runner to create custom application, но он по-прежнему не имеет значения.
Чтобы исправить NPE в Заявке мигрировали:
testCompile "org.robolectric:robolectric:3.0"
UPDATE:
Когда я создаю AsyncTask в @Test - это работает
new AsyncTask() {
@Override
protected Object doInBackground(Object[] params) {
System.out.println("empty async task");
return null;
}
}.execute();
ShadowApplication.runBackgroundTasks();
Robolectric.flushBackgroundThreadScheduler();
Поэтому проблема при создании задачи с ' static 'метод