Articles of android testing

如何使用Espresso空闲资源

该场景是当用户点击“下载”按钮时,数据(音乐/图像等)开始从互联网下载。 下载完成后,按钮会将标签文本更改为“打开”。 然后用户单击“打开”按钮。 我所做的就是: onView(allOf(withId(R.id.button),withText(“Download”))).check(matches(isClickable())).perform(click()); try { Thread.sleep(delayedTime); } catch (InterruptedException e) { e.printStackTrace(); } onView(allOf(withId(R.id.button),withText(“Open”))).check(matches(isClickable())).perform(click()); 有时测试通过,有时它不会。 有时失败的原因是”No views in hierarchy found matching: (with id: something:id/button and with text: is “Open”).我知道在Espresso中使用Thread.sleep也是不好的做法。我已经阅读Espresso的闲置资源 ,但它对我没有意义,我不知道如何在这种特殊情况下应用它。

Android Espresso Ui测试validationActionPage的标签文本

我正在尝试使用Espresso测试ActionPage的文本。 但是,当我运行Ui Automation Viewer时,我可以看到ActionPage显示为View而不是ActionView,它没有TextView。 我试过像这样检查ActionLabel文本,但这不起作用: onView(withClassName(equalToIgnoringCase(“android.support.wearable.view.ActionLabel”))).check(matches(withText(“MyText”))); 我有一个我的ActionPage的id,所以我可以用onView(withId(R.id.actionPage))find它,但我不知道如何访问它的子onView(withId(R.id.actionPage))来获取ActionLabel文本。 我尝试编写自定义匹配器,但这也不起作用: onView(withId(R.id.actionPage)).check(matches(withChildText(“MyText”))); static Matcher withChildText(final String string) { return new BoundedMatcher(View.class) { @Override public boolean matchesSafely(View view) { ViewGroup viewGroup = ((ViewGroup) view); //return (((TextView) actionLabel).getText()).equals(string); for(int i = 0; i < view.getChildCount(); i++){ View child = view.getChildAt(i); if (child instanceof TextView) { return ((TextView) child).getText().toString().equals(string); } } […]

如何从Android Oreo中禁用espresso测试的新自动填充function

使用sdk 26在Android设备上运行测试会导致它们失败,因为新的自动填充function会在espresso尝试点击它们时隐藏字段。 我在firebase测试实验室运行我的测试,所以我不能在我的测试设备上手动禁用它们。 一些图片: 1.单击用户名字段前可以看到密码。 2.单击用户名字段后,此自动填充对话框将隐藏密码字段: 3.登录后显示另一个“填充”对话框: Espresso无法点击现在的密码字段,因为自动填充对话框隐藏了我的字段并fail 。 使用AutofillManager#disableAutofillServices()仅禁用#2。 对话但是#3。 还在那里。 如何在测试设备上禁用自动填充?

我可以设置一个BuildConfig标志,返回是否使用`connectedAndroidTest` gradle任务构建apk吗?

如果我们正在运行Androidunit testing,我的应用程序的一部分我不想运行,所以我想用类似的东西包围它们 if (!BuildConfig.TESTING) { // Code here that I don’t want to run during tests. } 是否可以根据是否使用connectedAndroidTest gradle任务来填充此BuildConfig标志? 这是解决这个问题的理智方式吗?

什么unit testing,在Android应用程序中

我的应用程序主要是GUI,它们可以与服务器进行大部分信息通信。 如果出现任何问题,通常会在网络调用中或对JSON对象做出错误的假设。 unit testing不适合这些网络相关和I / O相关任务,否则它们不会被称为unit testing。 所以我试图在我的案例中收集unit testing的要点。 为什么我会测试Android按钮是否可以单击或EditText可以看到我键入的内容? 我只是不明白实现这些繁琐的测试的效用 private void initElements(){ placeButton = (Button) findViewById(R.id.currplace); placeButton.setText(MainActivity.this.getString(R.string.findingLocation)); placeButton.setEnabled(false); selectplaceLayout = (LinearLayout)findViewById(R.id.selectplaceLayout); selectplaceLayout.setVisibility(View.GONE); splash = (RelativeLayout)findViewById(R.id.splashbg); infoLayout = (LinearLayout)findViewById(R.id.infoLayout); } 如果以上方法通过,我的所有活动都在onCreate中运行,那么我知道应用程序有效。 对此进行unit testing将是一个冗余耗时的事情。 耗时,因为我不熟悉jUnit和Android测试框架中的所有方法。 所以,长话短说,重点是什么? 有什么特别的方式我应该考虑这些测试吗? 到目前为止,我所看到的所有示例和教程仅仅讨论了最简单的示例,为了简洁起见,但我无法想到在主要的客户端 – 服务器应用程序中进行unit testing的任何实际用途。 通过访问我已经知道并声明并初始化的android视图,我期望发现什么? 我必须以过于有限的方式思考这个问题 所以,洞察力赞赏

如何进行unit testing(使用JUnit或mockito)recyclelerview项目点击

我目前正在尝试单独测试recyclerview addonitemclick listner,使用junit或mockito。 这是我的代码: private void mypicadapter(TreeMap<Integer, List> photosMap) { List mItems = new ArrayList(); for (Integer albumId : photosMap.keySet()) { ListHeader header = new ListHeader(); header.setAlbumId(albumId); mItems.add(header); for (Photos photo : photosMap.get(albumId)) { mItems.add(photo); } pAdapter = new PhotoViewerListAdapter(MainActivity.this, mItems); mRecyclerView.setAdapter(pAdapter); // set 5 photos per row if List item type –> header , […]

Gradle构建错误:无法访问ITest坏类文件:在版本50.0 classfile中findITest.class默认方法

我有奇怪的问题,不知道如何解决它。 我有一个默认方法的接口,如下所示: public interface ITest{ default String getText(){ return “ITest”; } } 和实现此接口的类,如下所示: public class TestClasssss implements ITest{ private String text; } 我试图在我的appunit testing项目中使用这个类。 所以,如果我在我的android的unit testing项目中复制这个类,它编译好并且所有工作都按预期工作,但是如果这个类和接口在app源文件夹中声明,应用程序不会编译并崩溃 Error:(30, 10) error: cannot access ITest bad class file: ~\ITest.class default method found in version 50.0 classfile Please remove or make sure it appears in the correct subdirectory of […]

如何在exception后继续运行Android检测测试?

显然,当检测应用程序发生exception时,将停止检测测试运行: 测试未能完成。 原因:’由于’exception’导致仪表运行失败。 检查设备logcat以获取详细信息 这是自定义仪表运行器中的所需行为还是错误配置? 我正在使用自定义MonitorinInstrumentation [1]来自动化验收测试。 不幸的是,在一次测试中发生exception时,测试执行被取消。 我希望测试套件完成并只标记失败的测试,就像在JUnit中一样。 在一次测试中发生exception的情况下,是否存在执行(连接)测试而不退出整个测试的一般方法? https://github.com/cucumber/cucumber-jvm/blob/master/examples/android/android-studio/Cukeulator/app/src/androidTest/java/cucumber/cukeulator/test/Instrumentation.java

Android – Independent Fragment UI测试工具

我一直在寻找一种方法来分别测试我的碎片的UI(即独立于其他碎片和活动),但我找不到办法。 特别是,假设我有片段A,片段B和片段C.进入片段C的唯一方法(应用方式)是首先通过片段A和片段B. 我正在寻找一种直接测试Fragment C的方法(可能通过模拟它的依赖关系,如果存在的话),而不必通过Fragment A和B. 到目前为止我调查的工具: monkey:仅用于通过命令行生成伪随机事件。 不是我想要的。 monkeyrunner:它可以运行Python程序将事件流发送到我的Android应用程序,但它不能直接使用这些脚本定位特定的Fragment。 Espresso:白盒测试工具。 这接近我想要的,但它仍然需要在到达片段C之前通过片段A和B(即,您需要启动您的应用程序,然后测试将从那里运行)。 UI Automator:黑盒测试工具。 这也很接近,但同样,它需要在测试我想要的之前通过先前的片段(片段C)。 有没有办法直接测试Fragmen的用户界面 ?

Android Espresso:如何在将一个活动跟踪到多个片段架构时测试特定片段

我的应用程序包含一个Activity for many Fragments 。 我希望使用Espresso来测试Fragments的UI。 但是我遇到了一个问题。 如何测试未添加到onCreate的Activity的Fragment 。 我在Fragment看到的所有例子都涉及在onCreate中添加Fragment 。 那么我如何告诉Espresso去特定Fragment并从那里开始呢? 谢谢