2012-03-01 11 views
18

私はAndroidアプリケーションのコンポーネントのテストを書いています。このコンポーネントはアクティビティを使用していくつかのレポートを作成します。だからコンポーネント(醜いアーキテクチャ)をテストするためのアクティビティが必要で、テストプロジェクト内でダミーアクティビティを作成し、ActivityInstrumentationTestCase2<TestActivity>から継承したテストを作成するのは簡単だと思っていましたが、何らかの理由で常にjava.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.xxx/.Testctivity }例外が発生します。Androidテストプロジェクト内でアクティビティを定義してテストを実行することはできますか?

マニフェストファイルにテストアクティビティが追加され、パッケージが正しく設定されているようです。

私は運がないcom.xxx(アプリケーションのパッケージ)とcom.xxx.testパッケージの両方に入れようとしました。しかし、私がTestActivityをターゲットアプリケーションに移動すると、すべて正常に動作します。だから私はテストプロジェクトと私のアプリケーションの違いは何かと不思議に思って、テストプロジェクトの中で活動することさえ可能です。

答えて

9

はい、それは可能ですが、それはofficial dev guideに述べたように、お勧めしません:

テストプロジェクトを作成したら、テストパッケージを作成します。このパッケージにはアクティビティは必要ありませんが、必要に応じてアクティビティを定義できます。テストパッケージでは、アクティビティクラス、テストケースクラス、または普通のクラスを組み合わせることができますが、主なテストケースはAndroidテストケースクラスまたはJUnitクラスのいずれかを拡張する必要があります。これを行うために

、次のものが必要です。

  1. は、テストプロジェクトのAndroidManifest.xmlに設定あなたのダミーの活動を定義します。
  2. テスト プロジェクトのAndroidManifest.xmlでinstrumentation targetPackageポイントを自分自身に変更します。 (テスト対象のアクティビティクラスはinstrumentation targetPackageの下で でなければなりません)。あなたがDummyActivityTestを使用してテストDummyActivityをしたい場合、私は2つのクラスDummyActivityとDummyActivityTestが含まれているcom.example.testテストプロジェクトを持っていると仮定

、そして、あなたはこのようなあなたのテストプロジェクトのAndroidManifest.xmlを定義する必要があります。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.test" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="10" /> 

<!-- targetPackage point to test project itself --> 
<instrumentation 
    android:name="android.test.InstrumentationTestRunner" 
    android:targetPackage="com.example.test" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <uses-library android:name="android.test.runner" /> 
    <activity 
     android:name=".DummyActivity" 
     android:label="@string/app_name" > 
    </activity> 
</application> 

+0

targetPackageをselfに変更すると、InstrumentationTestRunner.onCreateでNoSuchMethodExceptionで失敗し始めます – basin

+0

私はこの方法に問題がありました。私は、/ manifest/@パッケージが/ manifest/instrumentation/@ android:targetPackageと同じであれば、テストはテスト対象のアプリケーションを効果的に置き換え、そのクラスを参照することが不可能になると思います。私はClassNotFoundExceptionsを取得していました。 –

+1

私は、このアプローチで、androidTestディレクトリにAndroidManifest.xmlを追加して動作させました。しかし、Android Studioの新しいバージョンでは、2.3.1の時点で、 ''要素は必要ありません。 –

0

テストプロジェクトや活動は、一緒に共存できるテストプロジェクトのパッケージ名としてターゲット・パッケージ名を入れ

+0

ありがとうございます。私はあなたが提案したように試しましたが、今すぐ取得しました スイートの構築中に例外が発生しました android.test.suitebuilder.TestSuiteBuilder $ FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239) – Fedor

関連する問題