我正在Android Studio 0.5.0
用Gradle 1.11
.我正在尝试从com.jakewharton.espresso安装Espresso库 :espresso:1.1-r2.由于某些原因,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' } }
外部图书馆:
最近发布了Espresso 2.0,使其成为Android支持库的一部分.这是在Android开发博客上宣布的.
有了这个,他们还链接了更新的设置指南.在那里,您可以找到从头开始配置或更新现有espresso配置2.0的说明.
变更是以上2个链接包含您需要的所有信息.如果没有,我列出了下面的一些常见错误
首先升级你的android Studio版本.您应该能够从稳定构建通道(=默认值)获得至少1.0.因此,只要使用菜单选项的Android工作室 > 检查更新....
要获得最新信息,您还可以进入"偏好设置",搜索更新并将频道更改为金丝雀频道.
Espresso包含在版本11的支持库中,因此您必须至少获得该版本.使用Android SDK管理器检查更新.支持库位于底部的Extras树中.
如果从较旧的espresso版本升级,则必须更新依赖项和命名空间.对于新项目,只需将这些添加到dependencies
您的build.gradle
文件中即可.
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;
需要build.gradle
在defaultConfig中的文件和用于从Android Studio启动测试的运行配置中配置测试运行器.
defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }
在运行配置中,将其用作检测运行器(仅限完整类名):
android.support.test.runner.AndroidJUnitRunner
并以一个示例测试用例来完成.请注意,这MainActivity
是您要测试的行为.测试本身是以测试开始的公共方法,testListGoesOverTheFold
如下例所示.
@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()); } }
有关编写测试的更多信息,请访问espresso开始指南.
这个问题让我抓狂.似乎它是Android Studio中的一个已知错误.在我的情况下,它在我将父类应用程序的Build Type从Release更改为Debug后解决了.希望这可能对某人有所帮助
所以这基本上是Android Studio的一个错误(我猜).
参考:
adt-dev小组提出的问题
实际错误 - #66841
解决方法(直到错误修复):
在gradle文件中添加重复提供的依赖项,如下所示:
dependencies { // ... provided 'com.jakewharton.espresso:espresso:1.1-r2' androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') { exclude group: 'com.squareup.dagger' } }