web-dev-qa-db-ja.com

Android StudioはEspressoクラスを認識しません

私は実行していますAndroid Studio 0.5.0Gradle 1.11com.jakewharton.espresso:espresso:1.1-r2 からEspressoライブラリをインストールしようとしています。何らかの理由で、ASはプロジェクトの同期後にEspressoクラスを認識できませんでした。したがって、インポートしようとするたびにimport static com.google.Android.apps.common.testing.ui.espresso.Espresso.onView;androidTestフォルダファイル内で、無効としてマークされます。

これが私のbuild.gradleです:

apply plugin: 'Android'

Android {
    compileSdkVersion 19
    buildToolsVersion '19.0.2'

    defaultConfig {
        minSdkVersion 14

        targetSdkVersion 19
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.squareup.dagger:dagger-compiler:1.2.1'
    compile 'com.squareup.dagger:dagger:1.2.1'

    androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
        exclude group: 'com.squareup.dagger'
    }
}

外部ライブラリ:

external libraries

23
midnight

つまり、これは基本的にAndroid Studio(私は推測しています)のバグです。

参照:

  1. adt-devグループで発生した問題
  2. 実際のバグ-#66841

回避策(バグが修正されるまで):

次のように、提供された依存関係をgradleファイルに複製します。

dependencies {
    // ...

    provided 'com.jakewharton.espresso:espresso:1.1-r2'
    androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
        exclude group: 'com.squareup.dagger'
    }
}
28
Kaushik Gopal

この問題は私を夢中にさせていました。そして、それはAndroid Studioの既知のバグのようです。私の場合、親アプリのビルドタイプをリリースからデバッグに変更した後に解決しました。これが誰かに役立つことを願っています

13
Max Ch

エスプレッソ2.0

最近Espresso 2.0がリリースされ、Androidサポートライブラリの一部になりました。 。これは Android開発ブログ で発表されました。

セットアップガイド

それで彼らも 更新されたセットアップガイドにリンクされています 。そこには、最初から構成する手順、または既存のespresso構成を2.0用に更新する手順があります。

その他のヒント

変更点は、上記の2つのリンクに必要なすべての情報が含まれていることです。そうでない場合は、以下にいくつかの一般的な間違いをリストしました

Android Studioを1.0にアップグレードします。*

Android Studioビルドをアップグレードすることから始めます。安定したビルドチャネル(=デフォルト)から少なくとも1.0を取得できるはずです。したがって、メニューオプションを使用するだけです。 )Android Studio>アップデートを確認してください...

最新のものから最新のものを取得するには、[設定]に移動し、更新を検索して、チャネルをカナリアチャネルに変更することもできます。

Androidサポートライブラリをv11 +に更新

Espressoはバージョン11からサポートライブラリに含まれているため、少なくともそのバージョンを入手する必要があります。 Android SDKマネージャーを使用して更新を確認します。サポートライブラリは、下部のExtrasツリー内にあります。

新しい依存関係と名前空間

古いエスプレッソリリースからアップグレードする場合は、依存関係と名前空間を更新する必要があります。新しいプロジェクトの場合は、これらをbuild.gradleファイルのdependenciesに追加するだけです。

dependencies {
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.Android.support.test:testing-support-lib:0.1'
}

また、名前空間が変更されたため、すべてのインポートを更新する必要があります。

Android.support.test.espresso

静的インポートを使用する方が簡単であることに注意してください。 例として一般的に使用されるいくつかのインポート:

import static Android.support.test.espresso.Espresso.onView;
import static Android.support.test.espresso.assertion.ViewAssertions.matches;
import static Android.support.test.espresso.matcher.ViewMatchers.withId;
import static Android.support.test.espresso.matcher.ViewMatchers.withText;
import static Android.support.test.espresso.matcher.ViewMatchers.withContentDescription;

アサーションにはhamcrestを使用します。ここでもいくつかの例:

import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.anyOf;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace;

計装ランナー

テストランナーは、defaultConfig内のbuild.gradleファイルと、Android Studioからテストを起動するために使用される実行構成の両方で構成する必要があります。

defaultConfig {
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}

また、実行構成では、これをインストルメンテーションランナーとして使用します(フルクラス名のみ)。

Android.support.test.runner.AndroidJUnitRunner

テストケースの例

そして、最後にテストケースの例を示します。 MainActivityはテストしたいアクティビティであることに注意してください。テスト自体は、以下の例のtestListGoesOverTheFoldのように、testで始まるパブリックメソッドです。

@LargeTest
public class HelloWorldEspressoTest extends ActivityInstrumentationTestCase2<MainActivity> {

    public HelloWorldEspressoTest() {
            super(MainActivity.class);
        }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        getActivity();
    }

    public void testListGoesOverTheFold() {
        onView(withText("Hello world")).check(isDisplayed());
    }
}

ライティングテストの詳細については、 エスプレッソスタートガイドをご覧ください。

11
hcpl

6か月後、これはまだ問題であり、元のレスポンダーによって参照されたバグが再開されました: https://code.google.com/p/Android/issues/detail?id=66841 そして与えられました優先度が高い。まだAndroid StudioでEspressoクラスを認識できず、依存関係に「提供された」スコープを使用しても問題を解決できませんでした。(AS0.8.6およびGradle 0.12.2)

4
LateBloomer

http://tools.Android.com/tech-docs/new-build-system/user-guide によると、テストされるビルドタイプは1つだけで、デフォルトではデバッグビルドタイプです。

したがって、デバッグビルドバリアントを使用していることを確認し、アプリケーションを再構築します。他のビルドタイプでは、すべてのandroidTest依存関係は表示されません。

現在のビルドタイプをテストする必要がある場合は、次のようにすることができます。

Android {... testBuildType "staging"}

3

私の場合、Android Studio1.5.1はonView()またはonData()メソッドを認識しませんでした。 Espressoクラスとそのすべてのメソッドを静的にインポートしました。

以下の行を追加すると、すべてが完全に機能しました。

import static Android.support.test.espresso.Espresso.*;
3
Henry

エラーが発生しているソースファイルについては具体的ではありませんが、私のテストに基づくと、メインのアプリケーションクラスの1つからEspressoクラスにアクセスしようとしていると思います(内部 src/main/Java /)。もしそうなら、それは機能しません。なぜなら、androidTestCompile依存関係インクルードを介してEspressoをインクルードしたためです。これにより、テストクラスのみがアクセスできるようになります。 src/androidTest/Java

1
Scott Barta

私はみんなが上で推測したすべての解決策を試しましたが、それでもクラスが見つからないというエラーが発生しました。

私は自分の解決策を見つけました、それは私の日を救いました。したがって、Studioのプロジェクトフォルダの左側にあるプロジェクトタブを開き、ビルドバリアントプロジェクトがユニットテストに設定されていることがわかります。 Android Instrumentation Testsに再設定し、test.Javaファイルが** src\androidTest\Java **の下にあることを確認する必要があります。

0
Karoly