я настраиваю модульный тест для метода класса, который включает FaceDetector из библиотеки мобильного зрения Google, но я получил java.lang.UnsupportedOperationException, но он работает при работе на реальном устройстве Android. можно ли протестировать код FaceDetector? Спасибо
public class HeadDetector
{
private Bitmap facePicture;
private Context context;
private RectF headRectangle=new RectF();
public HeadDetector(Bitmap facePicture,Context context) {
this.facePicture = facePicture;
this.context = context;
}
public RectF generateHeadRectangle() {
FaceDetector faceDetector = new
FaceDetector.Builder(context).setTrackingEnabled(false)
.build();
Frame frame = new Frame.Builder().setBitmap(facePicture).build();
// when unit test hit below code
//java.lang.UnsupportedOperationException
SparseArray<Face> faces = faceDetector.detect(frame);
if (faces.size()>0){
Face face = faces.get(0);
headRectangle = new RectF(0,0,face.getWidth(),face.getHeight());
}
return headRectangle;
}
}
public class HeadDetectorTest {
@Test
public void shouldGenerateHeadRectangle(){
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
HeadDetector headDetector = new HeadDetector( TestHelper.createBitmapTest(context), context);
RectF rectF = headDetector.generateHeadRectangle();
assertNotEquals(rectF.width(),0.0f);
assertNotEquals(rectF.height(),0.0f);
assertThat(rectF.height(),greaterThan(rectF.width()));
}
}




что UnsupportedOperationException, скорее всего, вызван попыткой открыть аппаратную камеру, которая недоступна. поэтому вы можете аннотировать тест с помощью @RequiresDevice:
@RequiresDevice
public class HeadDetectorTest {
...
}
Indicates that a specific test should not be run on emulator.
It will be executed only if the test is running on the physical android device.
или подключить веб-камеру к эмулятору, чтобы предоставить ему то, что он требует.
просто сфокусируйте веб-камеру на изображении какой-нибудь головы, чтобы предоставить примерные данные :)