Я пытаюсь написать тест для моего приложения Android, которое обменивается данными с облачным сервисом. Теоретически поток для испытания должен быть таким:Как сделать JUnit4 «Подождите» для асинхронного задания до завершения тестов
- Отправить запрос на сервер в рабочем потоке
- Дождитесь ответа от сервера
- Проверьте ответ, возвращаемый сервером
Я пытаюсь использовать класс IdlingResource
Espresso для этого, но он не работает должным образом. Вот то, что я до сих пор
My Test:
@RunWith(AndroidJUnit4.class)
public class CloudManagerTest {
FirebaseOperationIdlingResource mIdlingResource;
@Before
public void setup() {
mIdlingResource = new FirebaseOperationIdlingResource();
Espresso.registerIdlingResources(mIdlingResource);
}
@Test
public void testAsyncOperation() {
Cloud.CLOUD_MANAGER.getDatabase().getCategories(new OperationResult<List<Category>>() {
@Override
public void onResult(boolean success, List<Category> result) {
mIdlingResource.onOperationEnded();
assertTrue(success);
assertNotNull(result);
}
});
mIdlingResource.onOperationStarted();
}
}
FirebaseOperationIdlingResource
public class FirebaseOperationIdlingResource implements IdlingResource {
private boolean idleNow = true;
private ResourceCallback callback;
@Override
public String getName() {
return String.valueOf(System.currentTimeMillis());
}
public void onOperationStarted() {
idleNow = false;
}
public void onOperationEnded() {
idleNow = true;
if (callback != null) {
callback.onTransitionToIdle();
}
}
@Override
public boolean isIdleNow() {
synchronized (this) {
return idleNow;
}
}
@Override
public void registerIdleTransitionCallback(ResourceCallback callback) {
this.callback = callback;
}}
При использовании с точки зрения Эспрессо в matchers тест выполнен правильно, ожидает активности, а затем проверить результат.
Однако простые методы утверждения JUNIT4 игнорируются, и JUnit не ждет завершения моей работы с облаком.
Возможно ли, что IdlingResource
работает только с эспрессо-методами? Или я делаю что-то неправильно?
Теоретически мышление, вы можете отправить запрос -что-то, как если бы работа выполнялась, отправляйте 'true' в противном случае' false' каждую секунду, и вы можете удерживать свое задание до тех пор, пока 'true' не будет отправлено с сервера с использованием синхронизированных методов. –