1

アンドロイドサービスの実装用のJUnitテストコードを書いています.SDカードにコピーされたいくつかのファイルでテストを初期化する必要があります。私のクラスの署名は、このようなものです:setUpメソッドのアセットからファイルをアンドロイドからコピーする方法Junit ServiceTestCase?

public class ImageServiceTest extends ServiceTestCase<ImageService> 

私は資産からファイルをコピーするthis先端を使用しようとしているが、getAssets()メソッドは、Activityクラスを拡張する必要があります。

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

So ..どのようにファイルをsdcardにコピーして、アンドロイドのjunitテストをセットアップできますか?

ありがとうございました。

シモンズ:

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

私はInstrumentationを使用しようとしていますが、Activityが必要ですが、私はServiceプロジェクトで作業しています。

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

が、この場合には資産がサービスのメインプロジェクトであるべきであることを考慮に入れる:私はあなたがこれを行うことができます...活動せずに計測を使用する方法

答えて

6

これはかなり簡単でした。

私の大きな問題は、テストプロジェクトから資産フォルダにアクセスするためのコンテキストを取得することでした。しかし、getContext()はメインのプロジェクトコンテキストを返します。

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

:-)

+0

ありがとう:http://www.mail-archive.com/[email protected]/msg140899.html – cassioso

+1

はい!これが答えです。 – pierrotlefou

1

を探しています。

+0

ありがとうdtmilano!しかし、私は言うことを忘れて、リソースはテストプロジェクトになければなりません。 – cassioso

0

隠された方法でもあり、AndroidTestCaseで、必要なものを提供する:だから、テストプロジェクトのコンテキストを取得するために私がテストパッケージを渡して新しいコンテキストを作成します。それはexposed with introspectionです。

private Context getTestContext() throws Exception 
{ 
    return (Context)getClass().getMethod("getTestContext").invoke(this); 
} 
関連する問題