私は実行していますAndroid Studio 0.5.0
とGradle 1.11
。 com.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'
}
}
外部ライブラリ:
つまり、これは基本的にAndroid Studio(私は推測しています)のバグです。
参照:
回避策(バグが修正されるまで):
次のように、提供された依存関係をgradleファイルに複製します。
dependencies {
// ...
provided 'com.jakewharton.espresso:espresso:1.1-r2'
androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
exclude group: 'com.squareup.dagger'
}
}
この問題は私を夢中にさせていました。そして、それはAndroid Studioの既知のバグのようです。私の場合、親アプリのビルドタイプをリリースからデバッグに変更した後に解決しました。これが誰かに役立つことを願っています
最近Espresso 2.0がリリースされ、Androidサポートライブラリの一部になりました。 。これは Android開発ブログ で発表されました。
それで彼らも 更新されたセットアップガイドにリンクされています 。そこには、最初から構成する手順、または既存のespresso構成を2.0用に更新する手順があります。
変更点は、上記の2つのリンクに必要なすべての情報が含まれていることです。そうでない場合は、以下にいくつかの一般的な間違いをリストしました
Android Studioビルドをアップグレードすることから始めます。安定したビルドチャネル(=デフォルト)から少なくとも1.0を取得できるはずです。したがって、メニューオプションを使用するだけです。 )Android Studio>アップデートを確認してください...。
最新のものから最新のものを取得するには、[設定]に移動し、更新を検索して、チャネルをカナリアチャネルに変更することもできます。
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());
}
}
ライティングテストの詳細については、 エスプレッソスタートガイド 。をご覧ください。
6か月後、これはまだ問題であり、元のレスポンダーによって参照されたバグが再開されました: https://code.google.com/p/Android/issues/detail?id=66841 そして与えられました優先度が高い。まだAndroid StudioでEspressoクラスを認識できず、依存関係に「提供された」スコープを使用しても問題を解決できませんでした。(AS0.8.6およびGradle 0.12.2)
http://tools.Android.com/tech-docs/new-build-system/user-guide によると、テストされるビルドタイプは1つだけで、デフォルトではデバッグビルドタイプです。
したがって、デバッグビルドバリアントを使用していることを確認し、アプリケーションを再構築します。他のビルドタイプでは、すべてのandroidTest依存関係は表示されません。
現在のビルドタイプをテストする必要がある場合は、次のようにすることができます。
Android {... testBuildType "staging"}
私の場合、Android Studio1.5.1はonView()
またはonData()
メソッドを認識しませんでした。 Espressoクラスとそのすべてのメソッドを静的にインポートしました。
以下の行を追加すると、すべてが完全に機能しました。
import static Android.support.test.espresso.Espresso.*;
エラーが発生しているソースファイルについては具体的ではありませんが、私のテストに基づくと、メインのアプリケーションクラスの1つからEspressoクラスにアクセスしようとしていると思います(内部 src/main/Java /)。もしそうなら、それは機能しません。なぜなら、androidTestCompile
依存関係インクルードを介してEspressoをインクルードしたためです。これにより、テストクラスのみがアクセスできるようになります。 src/androidTest/Java。
私はみんなが上で推測したすべての解決策を試しましたが、それでもクラスが見つからないというエラーが発生しました。
私は自分の解決策を見つけました、それは私の日を救いました。したがって、Studioのプロジェクトフォルダの左側にあるプロジェクトタブを開き、ビルドバリアントプロジェクトがユニットテストに設定されていることがわかります。 Android Instrumentation Testsに再設定し、test.Javaファイルが** src\androidTest\Java **の下にあることを確認する必要があります。