文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值的弊端 三、尝试在 sequence 中调用挂起函数返回多个返回值 四、协程中调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...在 Kotlin 协程 Coroutine 中 , 使用 suspend 挂起函数 以异步的方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程的挂起和恢复 ① ( 协程的挂起和恢复概念...sequence 中调用挂起函数返回多个返回值 ---- 尝试使用 挂起函数 kotlinx.coroutines.delay 进行休眠 , 这样在挂起时 , 不影响主线程的其它操作 , 此时会报如下错误...SequenceScope 类上 , 有一个 @RestrictsSuspension 注解 , RestrictsSuspension 注解的作用是 限制挂起 , 在该类中不能调用其它的挂起函数 ,...---- 如果要 以异步方式 返回多个返回值 , 可以在协程中调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断的 先后 返回 多个 返回值 ; 代码示例 : package
(MyAwesomeActivity.class).create().start().resume().visible().get(); 如果需要和页面控件交互,需要调用 visible() 来保证在单元测试中可以交互...文件,另一种是在类或方法上加 @Config @Config 方法上的配置会覆盖类上的配置。...Shadow 类里定义,比如 View 里有个方法 setEnabled(),那这个方法只能在 ShadowView 里重写,而不能到 ShadowView 的子类 ShadowViewGroup 中重写...,如果这样的话,对应的 ViewGroup 中调用 setEnable,Shadow 的寻找机制会找不到这个方法。...getNextStartedActivity(); assertEquals(expectedIntent.getComponent(), actual2.getComponent()); } 在
这些 APIs 可用于在真实和虚拟设备上进行仪器测试。从 Robolectric 4.0 开始,它们也可用于本地 JVM 测试。...我们使用 Espresso 视图交互库将文本输入到两个文本字段中,然后点击 UI 中的按钮。...这个测试可以在使用 Robolectric 或任何真实或虚拟设备的本地 JVM 上运行。...你可能决定只在真机上运行一些较大的测试,同时在模拟器上运行大量较小的单元测试,比如 Robolectric,它可以在本地 JVM 上更快地运行测试。...要使用 Robolectric 模拟器在本地 JVM 上运行测试用例,请将测试用例放在 “test” 资源根目录中,将以下代码添加到 gradle.build: testImplementation(“
的使用 关于代码 1 关于Robolectric3.0 作为一个软件开发攻城狮,无论你多不屑多排斥单元测试,它都是一种非常好的开发方式,且不谈TDD,为自己写的代码负责,测试自己写的代码,在自己力所能及的范围内提高产品的质量...本文对Robolectric3.0做了简单介绍,并列举了如何对Android的组件和常见功能进行测试的示例。 2 环境搭建 Gradle配置 在build.gradle中配置如下依赖关系: ?...Android Studio的配置 1.在Build Variants面板中,将Test Artifact切换成Unit Tests模式(注:新版本的as已经不需要做这项配置),如下图: ?...最后,在测试用例中,ShadowPerson对象将自动代替原始对象,调用Shadow对象的数据和行为 ?...7 关于代码 文章中的所有代码在此:https://github.com/geniusmart/LoveUT 另外,除了文中所示的代码之外,该工程还包含了Robolectric官方的测试例子,一个简单的登录功能的测试
其实很简单,直接在build.gradle中配置repo地址,不过这个问题曾经浪费好几天的时间 testOptions { unitTests.all { systemProperty...'robolectric.dependency.repo.url', 'https://mirrors.huaweicloud.com/repository/maven/' systemProperty...'robolectric.dependency.repo.id', 'huawei' } } 另外,在单元测试中,如果用到了android的资源文件,则需要在build.gradle中配置 includeAndroidResource...= true 加上上面的仓库配置,可以直接使用: testOptions { unitTests.all { systemProperty 'robolectric.dependency.repo.url...', 'https://mirrors.huaweicloud.com/repository/maven/' systemProperty 'robolectric.dependency.repo.id
MVC各个模块通信方式如下: MVC和MVP区别: 在MVC模式中,View和Model可以直接交互;在MVP模式中,View和Model模块不能直接交互,View通过Presenter与Model间接交互...在MVC中,Controller是基于行为的,可以被多个View共享,可以负责决定显示哪个View;在MVP中View和Presenter是一对一或这一对多的,并且Presenter和View是通过接口交互的...可能有的公司需要网络代理,那这个需要根据具体情况在Gradle中配置了。...1、选取合适的测试框架 作者开始在业务中尝试使用Robolectric测试框架,初心主要在于他的特性: Robolectric Test-Drive Your Android Code Running...但在实际使用的过程中遇到了不少的坑,比如: Robolectric版本和SDK版本强依赖。
我们不仅仅可以在Android Studio中执行这些测试任务,也可以在命令行中执行,比如说通过Gradle。...Robolectric 我们可以使用Robolectric来编写使用Android SDK和资源的测试。而这些测试任务会跑在一个JVM中。...在Robolectric之内,也需要包含JUnit,并且如果需要使用Support Library的话,你也需要使用Robolectric的shadow-support类: apply plugin:...))); } } Robolectric在Android Lollipop和兼容包中都有一些已知的问题。...即使它没有在文档中记录,并且也没有在task列表中,而当你执行gradlew tasks时,它就会直接运行的。
缺点: (1)和业务耦合太大,业务app在打包时需要裁掉测试代码和资源,和mainfest.xml中的测试元素。...优点: (1)测试代码是在真的Android环境上执行; (2)可以直接调用业务代码和被测接口。 综上,考虑到该模式,在测试范围,业务代码耦合,CI上,均不够好,因此放弃。...考虑的是:Robolectric。...1、从Robolectric样例代码可以看出,目前Robolectric 基本是 从UI层介入,理论上可以忽略UI层,测试单一组件的逻辑,但关键的是不能测试组件的集成逻辑。...2、android层的测试也是运行在PC端的,它并不能测试业务app在真实Android环境上的表现。
我们现在讲的是使用JUnit和Robolectric等其他的一些框架,写可以在我们开发环境的JVM上面直接运行的单元测试。...Mockito在github上面有2000多个mark,而JMockit只有100多个,跟Robolectric的兼容性也有问题。...关于Dagger2的介绍和使用,以及在单元测试中的运用,大家可以参考这篇文章。...使用Robolectric框架,这个框架基本可以理解为在JVM上面实现了一套安卓的模拟环境,同时给安卓相关的类增加了其他一些增强的功能,以方便做单元测试。...目前我们部门的模块,单元测试覆盖率都在50%以上 Q4:在团队开发中,怎么推广单元测试? 推广的确是个大问题,因为单元测试的好处只有实践过,才能真实的体会到。所以最好是有上面领导的支持。
如今,已经有大量的Android自己主动化測试架构或工具可供我们使用,当中包含:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolectric...在应用測试中,每个activity首先会被Instrumentation初始化,然后再载入到Android模拟器或设备的Dalvik虚拟机中来运行。 ...Pivotal实验室声称使用Robolectric能够在28秒内执行1047个測试。 LessPainful将Android測试又推进了一步,它提供了一个多设备平台自己主动化測试的服务。...JML:举个样例,SAXParser在Android 2.2之前有一个bug存在于对ContentHandler.startElement的回调中,它导致应用产生错误的行为。 ...在測试执行完毕后,应用会被卸载,而手机也会被恢复到初始设置。 InfoQ:与MonkeyRunner,Robotium和Robolectric相比,你们所提供的服务有什么优势呢?
则是笔者这系列文章的核心内容,在我的第一篇《Robolectric3.0(一)》中已经介绍了这个框架的特点,环境搭建,三大组件(Activity、Bordercast、Service)的测试,以及Shadow...2 日志输出 Robolectric对日志输出的支持其实非常简单,为什么把它单独列一个条目来讲解?因为往往我们在写UT的过程,其实也是在调试代码,而日志输出对于代码调试起到极大的作用。...这种做法不仅仅可以在写UT的过程中使用,在开发过程中也可以使用,当服务端的接口开发滞后于客户端的进度时,可以先约定好数据格式,客户端采用模拟网络请求的方式进行开发,此时两个端可以做到不互相依赖。...由于网络请求和回调函数是在子线程和UI主线程两个线程中进行的,且后者要等待前者执行完毕,这种情况要在一个TestCase中测试并不容易。...因此我们要做的就是想办法让两件事情同步的在一个TestCase中执行,类似于这样的代码: ?
Cucumber中的所有语句使用Ruby定义。 优点: 有大型社区支持。列表项 简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。...Android代码,然后在unit test运行的时候去截取android相关的代码调用,然后转到Robolectric实现的代码(shadow objects)去执行这个调用的过程。...Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。...在实际应用中可以集成多个框架。 ? 基于Instrumentation的测试框架,比如Espresso,Robotium,Selendroid等,都不能支持跨APP使用。...脚本执行过程中,利用图像检索算法分析匹配当前屏幕中对应的控件,并对其应用相应的鼠标或键盘操作。这种方式使得我们在脚本编写时,既无需关心繁琐的应用程序相关 API 亦不用获取 Web 内容对象。
Cucumber中的所有语句使用Ruby定义。 优点: 有大型社区支持。列表项简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。...Android代码,然后在unit test运行的时候去截取android相关的代码调用,然后转到Robolectric实现的代码(shadow objects)去执行这个调用的过程。...Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。...在实际应用中可以集成多个框架。 ? 基于Instrumentation的测试框架,比如Espresso,Robotium,Selendroid等,都不能支持跨APP使用。...脚本执行过程中,利用图像检索算法分析匹配当前屏幕中对应的控件,并对其应用相应的鼠标或键盘操作。这种方式使得我们在脚本编写时,既无需关心繁琐的应用程序相关API亦不用获取Web内容对象。
最后发现把onCreateOptionsMenu丢了(网上的大爷们这么默契,全部都把这部分代码忽略掉真的好吗)。附上ToolBar上创建菜单的方法。...Activity中写入: (XML方式) Java @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater...android.R.drawable.ic_menu_help) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true;} 菜单会显示在ToolBar...setShowAsAction相当xml中的app:showAsAction。withText作用是把菜单的文字显示出来,如果想仅显示文字,不设置icon即可。...然后在onOptionsItemSelected中处理点击事件: @Override public boolean onOptionsItemSelected(MenuItem item
这样一个确定的出包步骤能够让开发人员在本地环境快速的完成部署。 4)对产品的信心增强 项目在一个透明的环境中运行着,团队成员都关注这App质量,努力改善项目健康状况。...并且Android的object在JVM中无法创建。 这时可以采用Robolectric单元测试框架,这将大幅度提升单元测试覆盖率,且理论上可以达到100%。...Robolectric是以JUnit为核心,完成了对Android SDK的stub。采用stub的方式后,Android的组件在JVM中即可创建并运行,无需在Android平台下运行。...(cancelButton); 接下来的工作就是将Robolectric集成到CI中,让它检查程序的健康状况。...在Jenkins中执行运行Calabash Android的shell命令前需要注意指定运行时的gemset ? Calabash Android在Jenkins中的执行命令如下: ?
然后在xml文件中根据需要定义item <?xml version="1.0" encoding="utf-8"?...app:showAsAction="ifRoom|withText" android:title="new crime"> 在Fragment...类中,继承onCreateOptionsMenu(Menu, MenuInflater)方法,加载menu资源文件: @Override public void onCreateOptionsMenu(...Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate...(R.menu.fragment_crime_list, menu); } 最后在Fragment类中的onCreate(Bundle)方法中加入: setHasOptionsMenu(true); 完整代码看起来是这样的
* * >OptionMenu: * 方式一: * 在Activity中重写:onCreateOptionsMenu(),在此方法中调用...* 方式二: * ①res资源目录下,创建menu文件目录下一个xml文件,文件中添加 * ②在Activity...中重写:onCreateOptionsMenu(),在此方法中调用 * getMenuInflater().inflate(); * * >ContextMenu...: * 方式一: * 在Activity中重写:onCreateContextMenu(),在此方法中调用 * menu.add...* 方式二: * ①res资源目录下,创建menu文件目录下一个xml文件,文件中添加 * ②在Activity
在 Android 中具有单独接口,用于在活动中使用菜单。 本例使用一个菜单来控制按钮的背景颜色,从其中可以了解如何在应用程序中使用菜单。 ?...(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, RED_MENU_ID, 0, R.string.red...return true; } return super.onOptionsItemSelected(item); } } 使用菜单主要通过重载 Activity 中的两个函数来实现...: public boolean onCreateOptionsMenu(Menu menu) public boolean onOptionsItemSelected(MenuItem item)...菜单类在 Android 中表示为 android.view.Menu 类。使用这个类可以进行一些更为细节的设置和操作。
09/27上午1-4节 一、复习:打开上节课完成的AS项目Chap2AsProj 导入项目 二、日志Log的使用 三、隐藏标题栏 1,你的Activity如果继承的是Acitivity: 在setContentView...(menu);//return true:允许创建的菜单显示出来;return false:创建的菜单无法显示 } 参考链接:android中menu.add()的使用说明_Jason_新浪博客 扩展-...带子菜单项:Android menu add中的4个参数说明 - zjy_hll的专栏 - 博客频道 - CSDN.NET 2、定义菜单响应事件:ctrl+o重写父类方法 public...super.onOptionsItemSelected(item); } 扩展-复杂:Android 学习笔记(二七):Menu - 愷风(Wei)的专栏 - 博客频道 - CSDN.NET 方法: 1、创建菜单xml (1)在res...//inflate(R.menu.menu_main,menu)给当前Activity创建菜单,参数1:通过哪个资源文件来创建菜单;参数2:菜单项将添加到哪一个Menu对象中 getMenuInflater