Articles of android testing

Gradle:如何为课程进行仪器测试

我正在Android Studio中运行检测测试,运行配置定义如下(不介意警告): 所以这是针对特定类调用测试服。 我怎么能用命令行实现这一点,我想用./gradlew命令?

Android集成测试:Robotium还是UIAutomator?

我想为Android应用程序设置集成测试,我想知道什么是更好的: Robotium或最近推出的uiautomator 。 我之前有使用Robotium的经验,这个框架对于集成测试来说非常棒。 但最近推出的uiautomator看起来也不错。 目前我看到uiautomator有几个限制: 没有xml测试报告 没有兼容性(仅适用于4.1+) 没有Eclipse支持,这意味着很多控制台工作 另一方面,此工具允许您摆脱测试中的应用程序沙箱,并且它独立于程序包,因此可以一起测试多个应用程序。 另外我知道用Maven,Robotium和像jenkins这样的CI进行设置是相当容易的,但是我不确定uiautomator是否那么容易。 我想问一下uiautomator还有其他任何陷阱吗? 或者最好坚持使用Robotium?

Espresso – 使用异步加载的数据断言TextView

我正在使用谷歌Espresso for Android编写UI测试,我一直坚持如何断言TextView文本,该内容是从Web服务异步加载的。 我目前的代码是: public class MyTest extends BaseTestCase{ public void setUp() throws Exception { // (1) Tell the activity to load ‘element-to-be-loaded’ from webservice this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(“data://data/element-to-be-loaded”))); getActivity(); super.setUp(); } public void testClickOnReviews(){ // (2) Check the element is loaded and its name is displayed Espresso .onView(ViewMatchers.withId(R.id.element_name)) .check(ViewAssertions.matches(ViewMatchers.withText(“My Name”))); // (3) Click on the […]

运行Espresso测试时,Dagger代码给出NoClassDefFoundError,正常运行正常

开始探索Espresso 2.0,但似乎遇到了打嗝。 我无法让测试成功运行任何包含Dagger的项目。 当我运行测试时,我得到以下exception(最后的整个堆栈跟踪): java.lang.NoClassDefFoundError: com/pdt/daggerexample/model/DaggerExampleAppModule$$ModuleAdapter$ProvideMySingletonProvidesAdapter 应用程序在未从AndroidInstrumentationTest运行时运行。 以下是一些相关文件,我还将项目上传到github,以便更快地结账/复制https://github.com/paul-turner/espressoDaggerExample 。 的build.gradle: apply plugin: ‘com.android.application’ android { compileSdkVersion 21 buildToolsVersion “21.1.2” defaultConfig { applicationId “com.pdt.daggerexample” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” minSdkVersion 16 targetSdkVersion 21 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } debug { minifyEnabled false } } packagingOptions { exclude ‘LICENSE.txt’ exclude […]

如何使用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 , […]