У меня проблемы с тестированием результата FirebaseVisionTextRecognizer.processImage ()
Мое Android приложение берет результат этой функции и пытается интерпретировать его в специальном контексте. Различные типы изображений должны обрабатываться по-разному с помощью специального анализатора. Поэтому я подумал, что автоматический тест этих классов будет правильным подходом.
Robolectri c звучит как подходящая структура для этого варианта использования, но я не совсем уверен.
@Rule
public TestRule rule = new InstantTaskExecutorRule();
private static int number = 0;
@Test
public void testTask() {
Bitmap testBitmap = BitmapFactory.decodeFile( "src/test/testImages/img1.jpg" );
FirebaseApp.initializeApp( ApplicationProvider.getApplicationContext() );
FirebaseVisionImage visionImage = FirebaseVisionImage.fromBitmap( testBitmap );
FirebaseVisionTextRecognizer detector =
FirebaseVision.getInstance().getCloudTextRecognizer();
Task<FirebaseVisionText> result =
detector.processImage( visionImage )
.addOnSuccessListener( visionText -> {
number = 1;
System.out.println( "Success!" );
} )
.addOnFailureListener(
e -> {
number = 2;
System.err.println( "Failed…" );
}
);
// nothing of this block works
ShadowApplication.runBackgroundTasks();
shadowOf( getMainLooper() ).idle();
shadowOf( getMainLooper() ).runToEndOfTasks();
Robolectric.flushBackgroundThreadScheduler();
Thread t = new Thread( () -> {
try {
// Comment this out to see that it runs forever
// Tasks.await( result );
} catch( Exception e ) {
e.printStackTrace();
}
} );
t.start();
try {
t.join();
} catch( InterruptedException e ) {
e.printStackTrace();
}
assertThat( number == 1 ).isTrue();
}
Ничего не печатается, и если вы закомментируете команду, которая говорит, что вы хотите дождаться завершения задачи, вы будете ждать вечно (> 2 часа).
Я подозреваю, что она имеет что-то связанное с файлами, которые библиотека должна загружать при первом использовании, но я не уверен, вызвано ли это чем-то из набора ml-vision или в среде Robolectri c.
Спасибо за любые советы о том, как решить эту проблему или за предложения для других установок, где мне это не нужно.