1

私はAndroidサービス実装用のJUnitテストコードを書いています、そして私はsdcardにコピーされたいくつかのファイルでテストを初期化する必要があります。私のクラスの署名は次のようになります。

public class ImageServiceTest extends ServiceTestCase<ImageService>  

このヒントを使用してアセットからファイルをコピーしようとしていますが、getAssets()メソッドはActivityクラスを拡張する必要があります。

public void copyAssets() {
    AssetManager assetManager = getAssets();
    ...
}

だから..Androidでjunitテストを設定するためにアセットからSDカードにファイルをコピーするにはどうすればよいですか?

よろしくお願いします。

追伸:

'getSystemContext()。getAssets();'、'getContext()。getAssets();'、'getApplicationContext();' テストプロジェクトコンテキストではなく、サービスプロジェクトコンテキストを返します。

現在、インストルメンテーションを使用しようとしていますが、アクティビティが必要であり、サービスプロジェクトで作業しています。アクティビティなしでインストルメンテーションを使用する方法を探しています...

4

3 に答える 3

7

わかりました、それはかなり簡単でした。

私の主な問題は、テストプロジェクトからコンテキストを取得してアセットフォルダーにアクセスすることでした。ただし、getContext()はメインプロジェクトコンテキストを返します。したがって、テストプロジェクトのコンテキストを取得するために、テストパッケージに合格する新しいコンテキストを作成します。

Context mTestAppContext = getContext().createPackageContext("com.project.myapp",
                Context.CONTEXT_IGNORE_SECURITY);

:-)

于 2011-07-07T21:14:49.420 に答える
1

あなたはこれを行うことができます:

protected void setUp() throws Exception {
    super.setUp();
    AssetManager assets = getSystemContext().getAssets();
    InputStream input = assets.open("file.txt");
    assertNotNull(input);
}

ただし、この場合、アセットはサービスのメインプロジェクトに含まれている必要があることを考慮してください。

于 2011-07-04T22:35:45.813 に答える
0

AndroidTestCaseには、必要なものを提供する隠しメソッドもあります。内省で公開することができます。

private Context getTestContext() throws Exception
{
  return (Context)getClass().getMethod("getTestContext").invoke(this);
}
于 2012-08-24T20:34:05.447 に答える