Espressoを使用して簡単なUIテストを実行しようとしましたが、同じ例外を除いてすべてのテストが失敗します。
Java.lang.IllegalStateException:インストルメンテーションが登録されていません!登録インストルメンテーションの下で実行する必要があります
エスプレッソの使い方の初心者向けガイドです こちら 。私はすでに同様の質問を見つけましたが、私にとって最も関連性のある質問は答えられていません ここ -全体像を描いていないためだと思いますので、ここに私のコードがあります。すべてがまったく同じエラーで失敗するため、1つのテストのみを示します。
build.gradle(モジュール:アプリ)
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 27
defaultConfig {
applicationId "io.github.vinge1718.myrestaurants"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
//testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
dependencies {
testImplementation "org.robolectric:robolectric:3.8"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:27.1.1'
implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation('com.Android.support.test.espresso:espresso-core:3.0.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestImplementation 'androidx.test:rules:1.1.0'
androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
}
build.gradle(プロジェクト:MyRestaurant)
buildscript {
repositories {
google()
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
dependencies {
classpath 'com.Android.tools.build:gradle:3.2.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ここでの修正は、twoテストです。エラーはテスト自体に関連しているとは思いませんが、構成に関連していると思います-私は修正されたままです
(MainActivityInstrumentationTest.Java)
package io.github.vinge1718.myrestaurants;
import Android.support.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import androidx.test.rule.ActivityTestRule;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
@RunWith(AndroidJUnit4.class)
public class MainActivityInstrumentationTest {
private String mStringToBetyped;
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);
@Before
public void initValidString() {
// Specify a valid string.
mStringToBetyped = "Portland";
}
@Test
public void validateEditText(){
onView(withId(R.id.locationEditText))
.perform(typeText(mStringToBetyped), closeSoftKeyboard())
.check(matches(withText(mStringToBetyped)));
}
@Test
public void locationIsSentToRestaurantActivity(){
String location = "Portland";
onView(withId(R.id.locationEditText)).perform(typeText(location));
onView(withId(R.id.findRestaurantsButton)).perform(click());
onView(withId(R.id.locationTextView)).check(matches(withText("Here are all the Restaurants near " + location)));
}
}
私はこのエスプレッソセットアップのドキュメントに従ってみました ここ しかし私は同じエラーを受け取り続けます:
テストの実行を開始しました
Java.lang.IllegalStateException:インストルメンテーションが登録されていません!登録インストルメンテーションの下で実行する必要があります。 at androidx.test.InstrumentationRegistry.getInstrumentation(InstrumentationRegistry.Java:50)at androidx.test.InstrumentationRegistry.getTargetContext(InstrumentationRegistry.Java:101)at androidx.test.rule.ActivityTestRule。(ActivityTestRule.Java:144)at android .rule.ActivityTestRule。(ActivityTestRule.Java:120)at androidx.test.rule.ActivityTestRule。(ActivityTestRule.Java:103)at io.github.vinge1718.myrestaurants.MainActivityInstrumentationTest。(MainActivityInstrumentationTest.Java:25)at Java.lang .reflect.Constructor.newInstance0(Native Method)at Java.lang.reflect.Constructor.newInstance(Constructor.Java:334)at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.Java:217)at org.junit.runners .BlockJUnit4ClassRunner $ 1.runReflectiveCall(BlockJUnit4ClassRunner.Java:266)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.Java:263) org.junit.rでunners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:78)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:57)at org.junit.runners.ParentRunner $ 3.run(ParentRunner.Java:290)atorg。 junit.runners.ParentRunner $ 1.schedule(ParentRunner.Java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:288)at org.junit.runners.ParentRunner.access $ 000(ParentRunner.Java:58) org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.Java:268)at org.junit.runners.ParentRunner.run(ParentRunner.Java:363)at Android.support.test.runner.AndroidJUnit4.run(AndroidJUnit4。 Java:101)at org.junit.runners.Suite.runChild(Suite.Java:128)at org.junit.runners.Suite.runChild(Suite.Java:27)at org.junit.runners.ParentRunner $ 3.run( ParentRunner.Java:290)at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.Java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:288)atorg.junit.runners.ParentRunner。 orgでaccess $ 000(ParentRunner.Java:58)。 junit.runners.ParentRunner $ 2.evaluate(ParentRunner.Java:268)at org.junit.runners.ParentRunner.run(ParentRunner.Java:363)at org.junit.runner.JUnitCore.run(JUnitCore.Java:137)at org.junit.runner.JUnitCore.run(JUnitCore.Java:115)at Android.support.test.internal.runner.TestExecutor.execute(TestExecutor.Java:56)at Android.support.test.runner.AndroidJUnitRunner.onStart( Android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.Java:2075)のAndroidJUnitRunner.Java:384)
テストは完了するまで実行されました。
これがエスプレッソのセットアップで説明されている私のテスト構成です ドキュメント :
これは、ライブラリandroidx
がcom.Android.support.test
と競合しているためだと思います。 jetpackを使用する場合は、すべてのテストライブラリをandroidxに変換する必要があります。その方法が必要ない場合は、androidx
ライブラリを削除し、すべてのcom.Android.support.test
を使用してください。 Android Instrumentation Testing:No Instrumentation Registered Error で私の最新の回答を確認してください。これがお役に立てば幸いです。
私のために働いたのは、完全に元に戻すことです
androidX
に
com.Android.support
build.gradleのライブラリ
注意:クラスにライブラリを再インポートする必要がある場合があります。
import androidx.test.runner.AndroidJUnitRunner;
に
import Android.support.test.runner.AndroidJUnitRunner;
また、build.gradleからライブラリを追加または削除するたびに、プロジェクトを常にクリーンアップして再ビルドするようにしてください。
私は同じ問題を抱えていましたが、クラスでメソッドを実行するテストと、それらの標準ユニット tests go in app/src/test/Java/<package>
。 UI tests ボタンを操作したり、テキストを編集したりするには、expressoが必要で、app/src/androidTest/Java/<package>
。ドキュメントを何度か読む必要があり、その違いを理解する前に1日無駄になりました。
|____app
|
| ____src
| |____androidTest
| | |____Java
| | |____<package>
| | |____ MainActivityInstrumentationTest.Java # expresso here
| |____test
| |____Java
| |____<package>
| |____ MainActivityInstrumentationTest.Java # not here