Как синхронизировать UIThread и тестовый поток в Android Instrumentation Test? - PullRequest
0 голосов
/ 22 марта 2019

Я работаю над приложением, которое использует аутентификацию по отпечатку пальца для выполнения определенного метода после него. Я хочу создать инструментальный тест, который автоматизирует процесс аутентификации и выполнения метода, блокируя выполнение теста и ожидая отпечатка пальца. Тестируемый метод работает следующим образом:

//Main activity

button.setOnClickListener(new View.onClickListener() {
    //call secondary activity for authentication
});

//Secondary activity for authentication

CustomClass.authenticate(param1, new CustomListener() {

    @Override
    public void onResult(String s) {
        //call other methods that are not important
    }

}, context);

После многих исследований я прочитал, что тесты выполняются в потоке, отличном от самого приложения, поэтому для проверки этого случая мне нужен какой-то способ синхронизации потока, выполняющего тест, и UIThread, который запускает приложение на физическом устройство.

Я попытался перейти к методу аутентификации функции обратного вызова с синхронизированным блоком, который должен уведомить тестовый поток после получения сигнала отпечатка пальца о том, что он может продолжить тест, но, очевидно, два потока не синхронизируются правильно и Тестовый поток не ждет уведомления и закрывается, не пройдя мой тест.

//Instrumented test class

Object lock = new Object();

CustomClass.authenticate(param1, new CustomListener() {

    @Override
    public void on Result(String s) {
        synchronized (lock) {
                    lock.notify();
                }
    }

});

synchronized (lock) {

    try {
        lock.wait();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

Заранее спасибо за любые ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...