質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

1回答

2268閲覧

Androidにおいてテストコードを書く際にローカルの画像からBitmap型の変数を作りたい

takeruhayasaka

総合スコア7

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2020/05/12 20:44

編集2020/05/12 20:55

こんにちは、いつもお世話になってます。

Junitをつかって、自作の画像処理のコードをテストしたいと考えています。

そこでpng画像をローカルから読み込んで、Bitmap型の変数を作りたいと思っています。

しかし、BitmapFactoryなどはどうやらつかえないようで、かといってRobolectricを利用するとshadowと呼ばれるモックデータが出てくる状態です。

こういう感じのローカルのパスを渡してBitmap型の変数にして渡してもらえる関数がほしいのですが、なにかよい方法や案はありませんでしょうか?

java

1 private Bitmap getBitmapImage(String path) throws IOException { 2 File file = new File(path); 3 byte[] byteimage = Files.readAllBytes(file.toPath()); 4 Bitmap image = BitmapFactory.decodeByteArray(byteimage, 0, byteimage.length); 5 return image; 6 }

環境

  • android api level 26
  • junit 4.12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/05/13 03:27

> BitmapFactoryなどはどうやらつかえない とはどういう意味でしょうか.
takeruhayasaka

2020/05/13 07:54

ローカルでのテストなので、android apiを叩けない前提となります。なのでBitmapFactoryやBitmapはそのままでは「利用できない」ということになります。 (なのでmock(e.g Robolectric)でbitmapを生成するモノを書かないといけないように思っているのですが今ひとつどのようにしたら良いのかとなっています) cf. https://developer.android.com/training/testing/unit-testing/local-unit-tests?hl=ja
jimbe

2020/05/13 18:41

> 自作の画像処理のコード に Bitmap クラスそのものが必要なのでしょうか. 単純に考えれば, 画像処理にはピクセルデータの 2 次元配列があれば十分なのではないでしょうか. だとすれば, 必要なのは Bitmap では無く, 「なんらかのデータ」から2次元配列を生成するということになります. 画像があり, それを元にテストするのであれば, その画像を例えばベタなバイナリファイルに予め変換しておき, それを単純に2次元配列に読み込んでしまえばテスト出来るのではないでしょうか.
takeruhayasaka

2020/05/14 00:58

たしかにそのとおりなんですが、しかし、外部ライブラリの引数にBitmap Typeがrequierされていて、それ故に変換できないかと考えている次第です
jimbe

2020/05/14 02:08

テスト対象のコードが外部ライブラリを使用しているのですか. 「ローカルでのテスト」というが「android では無く別OS(windows?)上の java でのテスト」かと思ったのですが, 対象が使用する外部ライブラリが Bitmap を必要とするものということは android 上でのユニットテストなのでしょうか. android のクラスを必要とするライブラリを使うコードを android 上でテストするのに「android api を叩けない前提」とは...「ローカルでのテスト」とはどういう状況でしょう.
hoshi-takanori

2020/05/15 00:42

Bitmap だけじゃなく、Canvas や Paint などの Android 固有の描画 API が使われてそう…。
takeruhayasaka

2020/05/15 14:15

まず、ローカル上でやるというのはlinux上の話です。android vmでもないです。 > android のクラスを必要とするライブラリを使うコードを android 上でテストするのに「android api を叩けない前提」とは...「ローカルでのテスト」とはどういう状況でしょう. なのでmockが必要そうではないかとの主張をしています。 > Bitmap だけじゃなく、Canvas や Paint などの Android 固有の描画 API が使われてそう…。 実装を読む限り自分が利用をしたいメソッドの部分やそこに関する呼び出しではそれはないように見えます。 ここで取り組んでいるのは具体的には画像処理系に関することになります。例えばQRデコードの機能と合わせてOpenCVなどを利用していると言った状態です。
jimbe

2020/05/15 15:36

最終的には android で使うつもりのコードがあり, それを linux の java vm でテストしようとされているのですね. そして, 対象のコードは外部ライブラリを使用しており...その外部ライブラリは android 版や (linux の) java 版があるのでしょうか. そうすると java 版の Bitmap というのは android の android.graphics.Bitmap では無い可能性が高いように思いますが.
guest

回答1

0

Bitmapの内部実装はネイティブ(C++)に依存しているので、Robolectric等でBitmapそのものを使ったUnitテストをすることはできません。org.robolectric.shadows.ShadowBitmapがBitmap相当の機能をJavaで実装したクラスなので、そちらを使ってテストをするのが妥当かと思います。

投稿2020/05/16 22:54

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問