テスト用プロジェクト内のリソースを参照する方法
はじめに
AndroidTestCaseを継承したクラスでAssets内のファイルを参照しようとしたらエラーになってしまうので解決策をメモ
解決編
- 医療情報事務所 一貫堂Blog: AndroidTestCaseを継承したテストケースでテストプロジェクト内のリソースを利用
- まさにそのままの問題でした。ありがとうございます。
AndroidTestCaseにはテスト用のContextを取得するためのAPIはあるようですが、hiddenらしくリフレクションで取得しています。一応、いくつかのクラスでリソースのアクセスを行いたいのでクラスを分けてAndroidTestCaseを外から渡すようにしてみました。ちなみにAndroidTestCase内にこのコードを書く場合には参考URLのようにgetTestContext以外の名前にしないとhiddenであるgetTestContextと名前がかぶっておかしくなります。
public class Utils { /** * テスト対象プロジェクトのAssetsフォルダを参照する場合はこれを使う * @param testCase * @return */ public static Context getTestContext(AndroidTestCase testCase) { @SuppressWarnings("unchecked") Class clz = testCase.getClass(); Method method; try { method = clz.getMethod("getTestContext"); return (Context) method.invoke(testCase); } catch (Exception e) { return null; } } }
例
// assets内 Utils.getTestContext(this).getAssets().open("json/test.json"); // res内は使わないぽい getContext().getString(R.string.test)