Я работаю над приложением, которое использует аутентификацию по отпечатку пальца для выполнения определенного метода после него. Я хочу создать инструментальный тест, который автоматизирует процесс аутентификации и выполнения метода, блокируя выполнение теста и ожидая отпечатка пальца. Тестируемый метод работает следующим образом:
//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();
}
}
Заранее спасибо за любые ответы!