Articles of android espresso

使用AndroidJUnitRunner运行时,ActivityUnitTestCase会抛出RuntimeException

我正在尝试将Espresso 2.0的AndoridJUnitRunner与ActivityUnitTestCase集成。 但是,当startActivity()尝试初始化mMockParent = new MockParent()时,我的测试会崩溃。 这是我做的: 使用Intellij 14 CE创建一个新项目,并对build.gradle进行一些更改。 android{ defaultConfig { applicationId “com.noob.testing” minSdkVersion 9 targetSdkVersion 21 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) compile ‘com.android.support:appcompat-v7:21.0.+’ androidTestCompile(‘org.mockito:mockito-core:1.9.5’) androidTestCompile(‘com.google.dexmaker:dexmaker:1.2’) androidTestCompile(‘com.google.dexmaker:dexmaker-mockito:1.2’) androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.0’) androidTestCompile(‘com.android.support.test:testing-support-lib:0.1’) } 编写JUnit4风格的unit testing。 @RunWith(AndroidJUnit4.class) public class MainActivityJUnit4Test […]

AndroidStudio上没有显示AndroidTest文件夹

我正在为Gradle和Android Studio以及项目的Espresso UI测试设置Android应用程序结构。 无论我尝试什么,androidTest文件夹都不会出现在AndroidStudio的项目结构中。 Project(root)build.gradle: buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:1.2.2’ } } allprojects { repositories { mavenCentral() } } App build.gradle: buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:1.2.2’ } } apply plugin: ‘com.android.application’ android { compileSdkVersion 22 buildToolsVersion “22.0.0” defaultConfig { applicationId “es.unizar.vv.mobile.catmdedit.app” minSdkVersion 16 targetSdkVersion 16 […]

android.util.Pair将String 作为androidTest中的参数保存,但在(单元)测试中保持为null

我想unit testing一个UtilsClasstypes的静态方法,它返回一个Pair 。 在这个方法中,我将一对String []注入其构造函数中,例如。 final Pair pair = new Pair(new String[] {“Hello”, “World”}, new String[] {“£33”, “£44”}); 并期望返回此对象。 当我对这个方法进行unit testing时,我得到一个非空的Pair对象,但其字段first = null , second = null 。 当我在Instrumentationtypes测试中运行相同的测试代码时,将正确填充字段。 我可以看到,在后一种情况下,构造函数public Pair(F first, S second) {输入调试点的位置和字段设置,但不在Unit测试中。 我正在寻找解释为什么会这样,如果我应该避免首先在代码中传递String[]作为构造函数params。

Appium v​​s Espresso用于自动化测试框架

在过去的几周里,我使用Appium(python)进行Android测试,但昨天我们决定转向Expresso(Java)进行自动化测试。 我们进行这种转变有几个原因: 我们希望扩展自动化测试,并且appium中没有很多function。 这是Android的最新测试框架之一,具有良好的向后兼容性。 小API,非常容易定制。 我一直在阅读浓缩咖啡,但我找不到任何好的东西,如果我将它与Appium进行比较。 我是一名Python/R developer所以也许有几点我无法理解。 有谁愿意帮助我了解这个新测试框架的转变是否对未来有利? 我在这里错过了更大的图片,任何帮助将不胜感激。

将Espresso与Proguard和Gradle集成

我正在使用的应用程序正在使用Gradle构建。 我正在尝试添加Espresso作为仪器测试的依赖项。 应用程序本身有一些依赖项,其中一个是Guava 15.0。 为了使这个工作,我使用具有显式依赖关系的Espresso版本,并排除捆绑的Guava(使用我自己的)。 dependencies { … instrumentTestCompile fileTree(dir: ‘libs/espresso-dependencies’, include: ‘*.jar’) compile ‘com.google.guava:guava:15.0’ … } 当我尝试使用gradle connectedInstrumentTest构建时,我得到与缺少方法和类相关的错误。 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.(InputManagerEventInjectionStrategy.java:35) 添加-keep class com.google.common.** { *; } 我的Proguard配置使一切正常。 似乎正在发生的事情是,Proguard只分析主应用程序使用的类,而不是寻找仪器测试依赖项的使用。 我的主应用程序未使用但仪器测试所需的方法/类似乎已经过优化。 如何使Proguard保留Espresso及其依赖项所需的Guava类/方法? 手动指定它们(有很多用法)似乎并不实际,并且保持所有这些都违背了Proguard的目的。

Espresso – 在全屏活动上执行操作失败 – InjectEventSecurityException

我浪费了两天时间尝试在全屏活动上执行点击操作。 重现步骤 使用全屏活动代码模板在android studio中创建一个新项目 为活动写一个espresso测试以执行点击 public class FullscreenActivityTest extends ActivityInstrumentationTestCase2 { public FullscreenActivityTest() { super(FullscreenActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); getActivity(); } public void testClickingOnLayout() { onView(withId(R.id.fullscreen_content)).perform(click()); } } 在模拟器上运行此测试(从姜面包到棒棒糖的任何Android版本)。 失败 android.support.test.espresso.PerformException: Error performing ‘click’ on view ‘with id: com.example.espressodefect:id/fullscreen_content’ … Caused by: android.support.test.espresso.PerformException: Error performing ‘Send down montion event’ on […]

IdlingResource Espresso与RxJava

我最近将我的应用程序从使用异步任务转换为rxjava。 现在,我的espresso测试不再等待我的数据调用完成,因为espresso没有rxjava的空闲资源。 我注意到你可以创建自定义空闲资源,但我无法弄清楚如何使它与rxJava Scheduler,Scheduler.io一起使用。 任何帮助/最佳实践将不胜感激。

浓咖啡。 执行’加载适配器数据’时出错

我有一个ListView,它显示数据库中的数据。 db = new DB(this); db.open(); String[] from = new String[]{DB.COLUMN_FIRSTNAME, DB.COLUMN_LASTNAME}; int[] to = new int[]{android.R.id.text1, android.R.id.text2}; scAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_activated_2, null, from, to, 0); lvData = (ListView) findViewById(R.id.lvData); lvData.setAdapter(scAdapter); lvData.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); lvData.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 它将数据库中的名字和姓氏显示为项目列表: 单击以显示UI 所以,今天我尝试使用Espresso与这个应用程序,我找不到点击包含文本的项目的方法。 我用的时候: onData(anything()) .inAdapterView(withId(R.id.lvData)) .atPosition(3) .perform(click()); 它完美地运作。 但我想点击包含相应项目文本的项目。 到目前为止我尝试了什么(我在stackoverflow,google,github等发现的所有内容): onView(allOf(withText(“Ivan Ivanov”))).perform(click()) onData(allOf(is(instanceOf(MainActivity.class)),is(“Ivan Ivanov”))) .inAdapterView(withId(R.id.lvData)) .perform(click()); onData(hasToString(startsWith(“v”))) .inAdapterView(withId(R.id.lvData)) […]

在travis support-v4 21.0上找不到android.support.v4.widget.DrawerLayoutImpl的类文件

我们正在尝试对travis CI进行测试。 我们有一个使用android.support.v4.widget.DrawerLayout的类。 当我们使用android支持v4库时 build.gradle – > targetSdkVersion: 19 `compile ‘com.android.support:support-v4:20.0.0’` .travis.yml – build-tools-19.1.0 – android-19 – extra-android-support – extra-google-google_play_services – extra-google-m2repository 我们没有得到这个错误,但在使用 build.gradle – > targetSdkVersion: 21 com.android.support:support-v4:21.0.+ .travis.yml – build-tools-21.0.1 – android-21 – extra-android-support – extra-google-google_play_services – extra-google-m2repository 我们得到了错误 private static class IdlingDrawerListener implements DrawerListener, IdlingResource { ^ class file for android.support.v4.widget.DrawerLayoutImpl not […]

在Espresso Android中使用IdlingResource的正确方法

我正在用Espresso编写UI测试。 应用程序与服务器紧密配合,因此在很多情况下,我需要等待计算任一值,或者获取并显示数据等.Espresso建议使用IdlingResource。 我的IdlingResource类看起来像这样(简单明了的例子)。 public class IRViewVisible implements IdlingResource { private View view; private ResourceCallback callback; public IRViewVisible(View view) { this.view = view; } @Override public String getName() { return IRViewVisible.class.getName(); } @Override public boolean isIdleNow() { if(view.getVisibility() == View.VISIBLE && callback != null) { callback.onTransitionToIdle(); return true; } return false; } @Override public void registerIdleTransitionCallback(ResourceCallback […]