1. ホーム
  2. android

[解決済み] AndroidJUnit4とActivityTestRuleをユニットテスト・クラスにインポートできないのはなぜですか?

2022-02-17 15:52:01

質問

Android UI テストフレームワークのクラスのインポートに問題があります。

これは私のクラスです。

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleUnitTest {

@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);

@Test
public void listGoesOverTheFold() {
    onView(withText("Hello world!")).check(matches(isDisplayed()));
  }
}

しかし、なぜか「cannot find symbol ActivityTestRule」と「cannot find symbol AndroidJUnit4」というエラーが表示されます。インポートしようとしたのですが、見つかりません。

build.gradleのdependenciesには、以下のように設定されています。

compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
androidTestCompile 'com.android.support:support-annotations:23.4.0'

androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

だから、私はすべての依存関係を設定したと思う - 私は多くのことを試してきたが、運が悪かった。

どなたかお分かりになる方はいらっしゃいますか?

解決方法は?

Androidで設定できるテストは2種類あります。

ユニットテスト

  • これらはJVM上で直接実行され、Androidフレームワークのクラスにはアクセスできません。
  • これらは test/java パッケージ
  • 依存関係は、build.gradleファイルにコマンドで追加する必要があります。 testCompile
  • これらのテストには、一般的にMockito、Robolectric、JUnitを使用します。

インスツルメンテーションテスト

  • Androidエミュレータ上で実行され、すべてのAndroidクラスにフルアクセスできます。
  • に保持されています。 androidTest/java パッケージ
  • 依存関係は、build.gradleに以下のように追加する必要があります。 androidTestCompile
  • 一般的に、これらのテストにはEspressoとJUnitを使用します。

私が知る限り、あなたは Espresso を使ってインスツルメンテーションテストを書こうとしていますが、そのテストは test/java パッケージはユニットテスト用です。 その場合、テストクラスを androidTest/java パッケージを使用します。