我正在尝试将本示例中的内容-https://github.com/googlesamples/android-testing/tree/master/ui/espresso/BasicSample-实施到我的应用中。
当我尝试执行简单的Espresso测试时,会发生以下情况:
“ / Applications / Android Studio 2.2.3.app/Contents/jre/jdk/Contents/Home/bin/java”(...)
进程完成,退出代码为1找不到类:“ com.faces_shop.app.MainActivityTest”空测试套件。
(从Android Studio复制粘贴)
考试:
package com.faces_shop.app; import android.support.test.filters.LargeTest; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard; import static android.support.test.espresso.action.ViewActions.typeText; 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; /** * Created by AnonymizedForReview on 2017-01-12. */ @RunWith(AndroidJUnit4.class) @LargeTest public class MainActivityTest { public static final String STRING_TO_BE_TYPED = "Espresso"; @Rule public ActivityTestRulemActivityRule = new ActivityTestRule<>( MainActivity.class); @Test public void changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editFilter)) .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard()); // onView(withId(R.id.changeTextBt)).perform(click()); // Check that the text was changed. onView(withId(R.id.editFilter)).check(matches(withText(STRING_TO_BE_TYPED))); } }
该应用程序的build.gradle:
apply plugin: 'com.android.application' android { // productFlavors { // /* https://android-developers.googleblog.com/2015/12/leveraging-product-flavors-in-android.html */ // mock { // applicationIdSuffix = ".mock" // } // prod // } compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.faces_shop.app" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':FacesApi') // androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { // exclude group: 'com.android.support', module: 'support-annotations' // }) // Testing-only dependencies // Force usage of support annotations in the test app, since it is internally used by the runner module. androidTestCompile 'com.android.support:support-annotations:' + rootProject.supportLibVersion; androidTestCompile 'com.android.support.test:runner:' + rootProject.runnerVersion; androidTestCompile 'com.android.support.test:rules:' + rootProject.rulesVersion; androidTestCompile 'com.android.support.test.espresso:espresso-core:' + rootProject.espressoVersion; compile 'com.android.support:appcompat-v7:25.0.1' compile 'com.android.support:recyclerview-v7:25.0.1' testCompile 'junit:junit:4.12' }
顶层build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } ext { buildToolsVersion = "24.0.1" supportLibVersion = "25.0.1" runnerVersion = "0.5" rulesVersion = "0.5" espressoVersion = "2.2.2" }
我究竟做错了什么?
为什么看不到测试班?
它位于androidTest中的此路径中:... / Examples / DynamicList / FacesApp / src / androidTest / java / com / faces_shop / app / MainActivityTest.java
要回答我自己的问题:
解
事实证明,Android Studio中有一个“运行/调试”配置,例如“ JUnit”,而应该是“ Android Tests”。
发生这种情况是因为,最初,测试类是偶然在src / test / java中而不是src / androidTest / java中。因此,当我最初运行它时,“运行/调试”配置文件被创建为JUnit,然后在以后尝试运行该类的尝试中被重用。我猜想它可以在Android Studio中进行改进,以便根据类的当前状态确定运行/调试类型(虽然,但不是抱怨;-))。