52933593 buid.gradle testCompile ‘junit:junit:4.12’ androidTestCompile ‘com.android.support.test.espresso...:espresso-core:2.2.+’ androidTestCompile ‘com.android.support.test:runner:0.4.+’ androidTestCompile...新建测试类 下面是模拟登录的代码 @RunWith(AndroidJUnit4.class) public class MainActivityTest { @Rule // 注解定义规则 public...ActivityTestRule mActivityRule = new ActivityTestRule( MainActivity.class); @Test // 测试用例...onView(withId(R.id.editTextPassWord)).perform(typeText("wjf"),closeSoftKeyboard()); // 触发登录按钮的点击事件
Google使用Espresso测试了他们自己的超过30个应用程序,包括G+、Maps和Drive。...Espresso测试是非常容易实现的,由三步构成: ViewMachers:寻找用来测试的View。 ViewActions:发送交互事件。...用来指明被测试的Activity,使用@Rule注解 测试方法必须以 test 开头,并且使用@Test注解(否则会报找不到方法异常) @Rule @Rule public ActivityTestRule...如果要测试AdapterView ,比如 ListView 或GridView等,使用上面的onView()方法是无效的,因为AdapterView的布局item是动态呈现的,没法直接指定,所以当要测试...,使用Espresso进行模拟各种情况输入和点击,测试是否符合我们的预期: 对Espresso的介绍大概就是这些了,希望大家多提建议,一起进步。
Android UI 测试框架,在真机运行,相比手动测试,相当于把流程自动化了,并且自动监测结果。 这篇文章主要是阅读官方文档的结果,这渣英文,不敢说翻译。若有理解错误,望指正。...有些感觉用不着的就舍弃了没有看,当然整篇通读下来,感觉真的开发过程也不会去写这个测试吧,好像学了点用不着的屠龙术。...不比单元测试,依然要编译运行到真机上,没敢用公司项目测,只是建了个最简单的 Demo,就感觉好慢,测试一次好慢。...:espresso-core:3.0.2' } 基本使用 在 src/androidTest 创建文件。...,类似单元测试中的断言 找到 View 有时候 View 可能没有对应的 R.id,或者虽然有但是不唯一。
Google希望,当Android的开发者利用Espresso写完测试用例后,能一边看着测试用例自动执行,一边享受一杯香醇Espresso(浓咖啡)。...将从配置、写用例、运行一步步介绍Espresso的使用。...应该统一使用Espresso提供的方法 测试用例,特别是UI自动化测试用例,应该尽量保持逻辑简单,覆盖关键路径就足矣。因为UI变动是很频繁的,越复杂,维护成本就越高,投入产出比就会自然降低了。...Espresso提供专门给RecyclerView使用的RecyclerViewActions。...原因是,Espresso的用例运行过程是只有当UI线程IDLE和UI队列没有需要执行的事件时,Espresso的测试代码才会被执行。使用方无需写Sleep逻辑等待UI绘制完成。
作者:施亮 团队:腾讯移动品质中心TMQ 引言 在Android单元测试中,不依赖Android环境的可以使用Junit。...如果依赖Android环境,但是没有UI相关或者UI比较简单(如点击按钮)的单元测试可以使用开源库Robolectric解决依赖问题,使测试运行在JVM上,而非模拟器上,大大提高测试运行效率。...工程中使用Espresso实现自动化测试只需要三步: 1、添加依赖: androidTestCompile 'com.android.support.test.espresso:espresso-core...测试代码如下: 整个TimePicker的测试就依此方式测试完成,测试类的结构: 测试报告 Activity与测试类写好后,PC连接一台真机,使用命令行进入工程根目录下,运行gradlewconnectedAndroidTest...并且,Espresso与Uiautomator依赖可以同时添加在工程中混合使用,也是棒棒哒。 获取更多测试干货,请搜索微信公众号腾讯移动品质中心TMQ!
大家都知道,测试Android系统原生态APP目前最好的工具使UiAutomation,随着DevOps的普及,我们需要尽早地发现程序中的缺陷,所以单元测试变得非常重要,Android系统推出了Espresso...可以独立测试APP建立专门的Project,Espresso必须建立在待测APP同一个目录下。...同步完成,我们在待测试代码的androidTest建立测试代码,下面是这段Espresso代码。...同matches()方法一样经常使用的,还有。...,这个如果你使用UiAutomation是很难实现的。
前言 最近小编在探索端对端测试相关的topic,在Android端的自动化测试上,可供我们选择的库并不是很多,而其中小编使用最多的两个库分别是Espresso和UIAutomator。...尽管两者都可以达成我们的最终目的,但实现的过程还是有所区别的: Espresso是用于Android测试的白盒解决方案,以沙盒化的形式测试当前应用程序。...Kotlin DSL带来的新思路 还好小编在调研阶段就意识到了这个问题,因此决定使用Kotlin的功能编写DSL以统一两个库的语法。...而在Kotlin中,DSL 则是对 Kotlin 所有语法糖的一个大融合,它的代码结构通常是链式调用、lambda 嵌套,并且接近于日常使用的英语句子,我们可以愉悦的使用 DSL 风格的 API,同时,...可以考虑将DSL结合Kotlin的Robot模式使用,进一步提升测试case的可读性: @Test fun shouldLoginToTheApp() { withLoginRobot {
在gradle.properties添加代理设置systemProp.http.proxyHost=你的代理地址(可以为127.0.0.1这种样式)systemProp.https.proxyHost=...你的代理地址(可以为127.0.0.1这种样式)systemProp.http.proxyPort=端口systemProp.https.proxyPort=端口手动下载gradle版本(.zip文件)...Espresso脚本录制的优点:1.可直接生成代码,可选择生成java或Kotlin2.生成的代码可在Android studio的项目文件目录中直接右键运行,效率较高Espresso脚本录制存在的缺陷...生成的代码可读性不高,需要优化(下图为生成的Kotlin代码)2. 断言只能判断元素是否存在、文本值等于什么,其他类型的判断需要自己写
theme: orangeAndroid AGP8.1.0组件化初探前言:前面两篇完成了从AGP4.2到 AGP8.1.0的升级,本文是由于有哥们留言说在AGP8.0中使用ARouter组件化有问题,于是趁休息时间尝试了一下...tv_name" />12.日志打印如下:图片图片13.实现效果如下:图片图片14.遇到问题:14.1 测试模块配置不对由于我是直接新建的模块...,所以当作完整项目配置的,这里如果只是测试组件化需要修改配置图片解决方法: 修改libs.plugins.com.android.application为libs.plugins.com.android.library...若配置完还有问题,请仔细检查每一步,直到正常跳转和数据传递,本人是亲自尝试了多个项目,基本上都没问题.14.3 数据传递和接收问题图片解决方法:a.在kotlin中使用ARouter接收数据时需要使用@...,这点我感觉很爽,用起来简直不要太安逸了,感兴趣的同学可以自行尝试,这里就简单举例.图片图片16.总结:其实本文的目的不是在于如何使用,ARouter这个很简单,相信做过组件化的同学都会,只是需要遇到问题时学会分析和调试
基准测试 基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。 基准测试是一种测量和评估软件性能指标的活动。...JMH JMH(Java Microbenchmark Harness) 是专门用于进行代码的微基准测试的一套工具API,也支持基于JVM的语言例如 Scala、Groovy、Kotlin。...benchmark_sequence.png 3.2 内联函数和非内联函数 Kotlin 的内联函数从编译器角度将函数的函数体复制到调用处实现内联,减少了使用高阶函数带来的隐性成本。...于是,我也尝试编写一个例子,此例子使用的 Kotlin 1.3.10 ,协程的版本1.0.1,RxJava 2.2.4 @BenchmarkMode(Mode.Throughput) // 基准测试的模式...在这些场景下,使用 JMH 都是很不错的选择。
虽然短 时间内不太可能替代Java,但这次官宣意味承认了Kotlin在Android开发中的合法地位,让想尝试Kotlin却有顾率的开发者可以放心地使用Kotlin(比如说我)。...:junit:4.12' } 正常来说,经过以上步骤我们就可以正常使用kotlin了,但是等等!!!...今天的主角好像不是怎么配置kotlin,我们的目的是让kotlin与databinding共存。...: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2...但是3.0用的kotlin用的应该是1.1.2-4,这个版本和as3.0可能有冲突,可能会出一个circular dependencies的错误。
Gradle5.0+已经支持了Kotlin,但碍于Android Studio目前适配并不是很好,所以并不建议开发使用,至于为什么,在文章末尾也给出了具体原因。 为什么要使用Kotlin改造?...Gradle采用groovy采用开发语言,是一种动态的dsl语言,缺点就是写脚本时如果出现问题,我们无法实时的得知,只能通过print进行得知,而且无法跳转,并且不支持自动补全。...我们先建一个普通的Android项目,然后改造如下,那怎么改造呢?...改造很简单,在你的gradle后面加上kts即可,然后as会自动识别,接着再修改一堆报错,这个过程很麻烦,目前Android Studio支持并不是很好 app的gradle plugins {...,目前Android Studio对Kotlin-Gradle支持的并不是很好,所以如果你新建一个model,就会再次新创建gradle配置文件,这样你就得再次手动配置,很麻烦,所以目前Kotlin-Gradle
大家好,又见面了,我是你们的朋友全栈君。 ViewStub是一个轻量级的的View,继承于ViewGroup,没有任何尺寸,不绘制任何东西,因此绘制或者移除时更省时。...(ViewStub不可见,大小为0) 优点 实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View 缺点 ViewStub所要替代的layout文件中不能有标签 ViewStub...在加载完后会被移除,或者说是被加载进来的layout替换掉了 用法 的root view的id是android:inflatedId指定的id panel_import,root view的布局和ViewStub视图的布局保持一致 所以,...text = "我是viewstub里的view" stub_id已经失效,如果再使用这个id,会报nullpointException; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn
命令 , 进行 lint 检查 , 测试代码结构 , 报如下错误 : Y:\002_WorkSpace\001_AS\SVG>gradlew :app:lintDebug FAILURE: Build...:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' // 矢量图支持库 , 支持...5.0 以下版本手机使用矢量图 , 这个是创建应用时自带的配置 implementation 'androidx.appcompat:appcompat:1.2.0' implementation...androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso...:espresso-core:3.3.0' } 2、方案二 配置 maven { url 'http://repo1.maven.org/maven2'
release { // 是否开启优化混淆 minifyEnabled true // 是否启用资源压缩 , 未使用的资源会被优化...:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' // 矢量图支持库 , 支持...5.0 以下版本手机使用矢量图 , 这个是创建应用时自带的配置 implementation 'androidx.appcompat:appcompat:1.2.0' implementation...:espresso-core:3.3.0' } 二、解决方案 ---- 分析错误提示 : kim.hsl.svg.ExampleInstrumentedTest > useAppContext[Pixel...出现问题 ; 屏蔽这两个后缀即可正确生成 " 测试覆盖率报告 " ; 再次执行 gradlew :app:createDebugCoverageReport 命令 , 生成 " 测试覆盖率报告 " 成功
Create Activity With Kotlin 并且开始下载Kotlin的依赖,下载完后,就可以看到我们创建的使用Kotlin编写的Activity了 ?...MainActivity 手动配置 在手动配置的时候,支持Kotlin和Java混编,所以是通过Gradle Plugin来完成Kotlin编译工作的。...在Top-Level的build.gradle中配置Kotlin插件的classpath,在Module-Level的build.gradle中使用Kotlin插件 ?...Kotlin Gradle Plugin 在Module-Level的build.gradle中配置使用kotlin-android以及kotlin-android-extensions插件...Apply Kotlin Plugin 注意,为了把kotlin和java的代码隔离开,将kotlin的代码放在src/main/kotlin路径下,所以需要在main.java.srcDirs
作者 | Sergio De Simone 译者 | 平川 策划 | 丁晓昀 Kotlin Multiplatform Mobile 由 JetBrains 创建,支持使用 Kotlin 从单个代码库创建具有原生...Kotlin Multiplatform Mobile 已经退出实验阶段,进入 Beta 测试。...它提供了一组在 Gradle 文件中使用的指令,包括新的 targets (支持 iOS、watchOS 和 tvOS 平台)、sourceSet、compilation 等。...如果你喜欢不同的方法,也可以使用 Kotlin Multiplatform 创建跨平台库,然后在独立的 iOS 和 Android 项目中使用这些库。...这里有一个精心整理的 Kotlin Multiplatform Mobile 样例的列表,感兴趣的读者可以看一下。
当前需求 : 目前的需求是保证之前的 Java 代码能平稳运行 , 基本框架不变 , 在 Kotlin 中使用 ButterKnife 进行视图绑定操作 ; II ....:espresso-core:3.2.0' /** androidx 依赖与老版本的 butterknife 冲突 */ implementation 'com.jakewharton...Kotlin 代码的 Activity 中使用 ButterKnife 注解 : 注意只能使用下面的两种方式 ; package kim.hsl.kb import android.app.Activity...推荐用法 : 老版本应用 ( 没有使用 androidx ) 继续使用老版本的 ButterKnife , 新版本的应用就别用这个框架了 , 使用 JetPack 中的 视图 / 数据 绑定 ; ① 老项目...:espresso-core:3.2.0' /** androidx 依赖与老版本的 butterknife 冲突 */ implementation 'com.jakewharton
第一个协程 在使用协程之前,需要保证Kotlin-Gradle-Plugin的版本高于1.3。目前最高的版本为1.3.11。...并且这样执行的协程,并不会阻塞主线程的执行 delay函数只能在协程中使用,否则编译不过,尽量避免使用GlobalScope.launch创建协程,当我们使用 GlobalScope.launch 时...而如果想要在当前线程创建协程的话,则需要使用runBlocking runBlocking { launch { Log.e(TAG,"${Thread.currentThread...但是这个函数必须使用suspend标识,否则编译错误,并且无法调用协程中到函数,比如delay()。...使用suspend标示的函数只能用于协程中,无法在其他函数中被调用 import kotlinx.coroutines.* fun main() = runBlocking { launch
image.png kotlin-android-extensions kotlin-android-extensions插件可以直接使用资源,节省findviewbyid(), 不需要添加任何额外代码...setSupportActionBar(toolbarView) .......... } ......... } 添加插件 在Gralde中配置: apply plugin: 'kotlin-android-extensions...实例: image.png 使用 代码中使用需要添加头文件: import kotlinx.android.synthetic.main.<布局>.* image.png
领取专属 10元无门槛券
手把手带您无忧上云