Как смоделировать BitmapFactory: метод decodeFile - PullRequest
0 голосов
/ 24 октября 2018

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

java.lang.RuntimeException: метод decodeFile в android.graphics.BitmapFactory не смоделирован

// Решено (обновлен код)

Я впервые запускаю модульные тесты с использованием mockito. Может, кто-нибудь подскажет, что я делаю неправильно (что я точно знаю).Я также использую ExifInterface для извлечения метаданных, связанных с изображением, но снова выдает ту же ошибку: java.lang.RuntimeException: метод getAttribute в android.media.ExifInterface не подвергается насмешке.

Вот класс MainActivity: (где я запускаю метод).

 public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initValue();
        }

        public void initValue()
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            Bitmap thumbnail = createThumbnailFromBitmap("/storage/emulator/0/demo/abcd", 100, 100);

 try {
            ExifInterface exifInterface = new ExifInterface("/storage/emulator/0/demo/abcd");
            String jsonData = exifInterface.getAttribute("UserComment");

            try {
                JSONObject rootJson = new JSONObject(jsonData);
                dateList.add(rootJson.getString("captured"));

            }

            catch(JSONException e)
            {
            }
        }
        catch(Exception e)
        {
            System.out.println("exception "+e);
        }
        }

        private Bitmap createThumbnailFromBitmap(String filePath, int width, int height){
            return ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filePath), width, height);
        }

    }

Мой тестовый класс:

 @RunWith(PowerMockRunner.class)
@PrepareForTest({BitmapFactory.class ,ThumbnailUtils.class})
    public class initValueTest {


        @Mock
        private Bitmap bitmap;


        @Test
    public void initValueTest()
    {
        PowerMockito.mockStatic(BitmapFactory.class);
        PowerMockito.mockStatic(ThumbnailUtils.class);
        when(BitmapFactory.decodeFile(anyString())).thenReturn(bitmap);
        MainActivity mainActivity =  new MainActivity();
        mainActivity.initValue();
    }
    }

Спасибо за вашу помощь, ребята.Пожалуйста, извините, если я делаю что-то не так.

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете либо:

  • Использовать mock для моделирования статического метода decodeFile.См. Доков об этом здесь
  • Извлечение логики декодирования растрового изображения в отдельный класс, извлечение интерфейса и предоставление другой реализации во время выполнения.
...