テストを実行しようとするたびに、コンソールに次のように表示されます。
Running tests
Test running startedTest running failed: Unable to find instrumentation info for:
ComponentInfo{com.employeeappv2.employeeappv2.test/Android.test.InstrumentationTestRunner}
Empty test suite.
私はしばらくこれにこだわっており、これまでオンラインで見た解決策は役に立たなかった。私のプロジェクト構造は次のように設定されています。
*メインモジュール-src * instrumentTest -Java * main -Java -manifest * build.gradle
私のbuild.gradleファイルは次のようになります。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'Android'
repositories {
mavenCentral()
}
Android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 19
versionCode 1
versionName "2.1.0"
testPackageName "login.test"
testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard- rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/scandit.Zip')
compile project(':pullToRefresh')
compile 'com.Android.support:appcompat-v7:19.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1+'
compile 'org.springframework.Android:spring-Android-rest-template:1.0.1+'
compile 'org.json:json:20090211'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.3.1'
compile 'com.Android.support:support-v4:19.1.+'
compile 'com.mcxiaoke.volley:library:1.0.+@aar'
androidTestCompile 'junit:junit:3.8'
}
テストディレクトリ用に別のマニフェストが必要ですか?もしそうなら、それはどのように見えるでしょうか?
編集:私は運が悪かったので、instrumentTestディレクトリにマニフェストを追加しようとしました。 IntelliJにtargetPackage名を解決させることができなかったため、赤で表示されることに注意してください。
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.employeeappv2.employeeappv2.src.instrumentTest"
Android:versionCode="1"
Android:versionName="1.0.0">
<application>
<uses-library Android:name="Android.test.runner" />
</application>
<instrumentation
Android:name="Android.test.InstrumentationTestRunner"
Android:targetPackage="com.employeeappv2.employeeappv2.src.main"/>
</manifest>
したがって、主な問題は、/ src /の下にandroidTestフォルダーを作成したときに、テスト用のソースフォルダーとしてIntelliJによって選択されなかったことです(Javaサブディレクトリが緑色に変わるはずです)。私はIntelliJ 13.0.3を使用していましたが、13.1.3にアップグレードした後、私のトラブルはすべてなくなりました。
*注意:androidTestフォルダーにマニフェストを追加しようとしないでください。Gradleのドキュメントには、androidTestフォルダーを作成するときにマニフェストを自動生成する必要があると明記されています。私にとっての問題は、androidTestがIntelliJ/Gradleによって認識されなかったため、ファイルが生成されなかったため、計測エラーが発生しなかったことです。
Android Studio 1.1を使用しています。次の手順でこの問題を解決しました。
Run - Edit Configurations - Android Tests
計測ランナーをAndroid.test.InstrumentationTestRunner
として指定します
次に、[ビルドバリアント]ツールウィンドウ(左側)で、テストアーティファクトをAndroid Instrumentation Tests
に変更します。
Build.gradleにはtestInstrumentationRunnerは不要で、マニフェストファイルにはインスツルメンテーションタグは不要です。
multiDexEnabled true
をbuild.gradle
に追加しようとしたときに同じエラーが発生しました。
これは、... Unable to find ... ComponentInfo ...
エラーメッセージで検索する際の最初のGoogleヒットの1つであるため、ここに私の経験を追加しています。
私の場合、ここでtestInstrumentationRunner
を追加するとうまくいきました。
...
Android {
...
defaultConfig {
...
testInstrumentationRunner "com.Android.test.runner.MultiDexTestRunner"
}
}
(私はcom.Android.tools.build:gradle:1.5.0
を持っています)
新しいパッケージを作成すると、StudioはApplicationTestクラスを作成しました。 s.myname.mypackageを使用の例として、次のディレクトリ構造が作成されました。
app/[myPackage]/src/androidTest/Java/us/myname/mypackage/ApplicationTest.class
最初は、そのまま使用できました。製品フレーバーをインストールした後、動作しなくなりました。その後、build.gradleに次の変更を加えました。
defaultConfig {
...
testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}
一部の人が好む
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
(現在の構成では、...InstrumentationTestRunner
デバッグ時、およびAndroidJUnitRunner
はリリースビルドタイプの使用中です。)
上記の構成は、デバッグビルドタイプでのみ機能します。リリースまたはカスタムビルドタイプで使用する場合は、build.gradleに以下を含めることができます。
buildTypes {
release {
...
}
debug {
...
}
}
testBuildType "release"
Studioの左下にある[ビルドバリアント]タブで、Android Instrumentation Tests
および正しいbuildType
が選択されています。
それが価値があるのは、通常のテストランナーを使用した後にカスタムテストランナーを作成したときにAS 2.3がハングアップしたことです。質問に投稿したのと同じエラーが表示されました。
[〜#〜] all [〜#〜] Android Instrumented Testsと再構築により、デバッグ構成を削除しました。それは修正されました。おそらくgradleを介して組み込まれているため、デバッグ構成でカスタムランナーを選択することができます。
VikingGlenの answer 、Liutingの answer 、および this の回答を組み合わせて行う必要がありました。この回答は、Android Studioバージョン2.1に対して有効です。
実行->構成の編集...->一般->特定のインスツルメンテーションランナー(オプション): "Android.support.test.runner.AndroidJUnitRunner"
build.gradle
(すべての依存関係を持つもの)、これを置きます:
defaultConfig { testInstrumentationRunner 'Android.support.test.runner.AndroidJUnitRunner' }
次に、このタイプのテストを実行できます。
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void login() {
//Open Drawer to click on navigation.
onView(withId(R.id.drawer_layout))
.check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
.perform(open()); // Open Drawer
}
}
これは私のプロジェクトで気づいたことです、私のapp(main)モジュールbuild.gradleでは、次のbuildType設定がありました
buildTypes {
debug {
multiDexEnabled true
}
mock {
initWith(buildTypes.debug)
}
}
testBuildType "mock"
AndroidJUnitRunnerをテストランナーとして(Android Studio)から)、およびtestInstrumentationRunnerとしてbuild.gradleで使用すると、テストは滞りなく実行されました。
multiDexEnabled true as defaultConfigであったサブモジュール内
defaultConfig {
multiDexEnabled true
....
}
私はの問題に遭遇しました
Test running startedTest running failed: Unable to find instrumentation info for:{mypackage.x.y/Android.support.test.runner.AndroidJUnitRunner"}
AndroidJUnitRunner in IDEおよびサブモジュールbuild.gradle。)を指定した場合、これはIDE /のテストランナーとしてMultiDexTestRunnerを指定することで修正されました。 build.gradle。
まとめると、build.gradleでmultiDexEnabled trueが指定されている場合にMultiDexTestRunnerを使用してテストを実行し、そうでない場合はテストランナーとしてAndroidJUnitRunnerを使用します。
この問題が発生したため、実行->構成の編集->左上の緑色の「+」ボタン-> JUnitに移動して修正しました
そこから、「クラスパスmodを使用...」を「アプリ」に設定します(または、アプリを実行すると、実行(再生ボタン)の左側に表示されるデフォルトのアプリ名)
最後に、テストクラス名を「class:」テキストボックスに入力します。適用をクリックして大丈夫です。
この時点で、テストクラスに他のエラーがなければ、動作するはずです。
すべてのユーザーのアプリがアンインストールされていることを確認してください。
設定->アプリ(すべてのアプリ)に移動します->アプリが存在する場合は、アプリをタップします->メニュー->すべてのユーザーに対してアンインストールします。
私の問題は、アプリが一時的にアンインストールされていたが、まだデバイス上にあったことでした。すべてのユーザーに対してアンインストールされなかったことを意味します。 (別の問題、解決方法がわからない。デバイスで唯一のユーザーです)
このため、アプリは再インストールされず、テストスイートには何も実行できませんでした。
私の問題の解決策は、メソッド名を
@Test
public void test() {
...
}
に
@Test
public void testSomething() {
...
}
それが誰かを助けることを願っています。