首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Dev Club 分享】安卓单元测试:What, Why and How

今天很高兴跟大家分享一下,我在安卓单元测试方面的一些经验。 这次分享主要介绍什么是单元测试、为什么要做单元测试、以及如何在安卓平台上做单元测试。...没有时间学习如何做单元测试的话,可以自己私底下学,然后在慢慢应用到项目中。 2. 如何在安卓平台做单元测试? 2.1 单元测试与其它测试的区别 接下来介绍一下安卓单元测试是怎么做的。...虽然说本身就是一个非常优秀的设计,而不仅仅是为了单元测试,但离开单元测试,使用依赖注入就少了很有说服力的一个理由。 那么这里我就介绍一下,怎么样把Dagger2应用到单元测试中。...用一定的架构,比如MVP等等,将安卓相关的代码隔离开了,中间的Presenter或Model是纯java实现的,可以在JVM上面测试。View和其他android相关的代码则不测。...5.4 把安卓里面的“纯java”代码copy一份到自己的项目里面 安卓里面有些类其实跟安卓没太大关系的,比如说TextUtils、Color等等,这些类完全可以把代码copy出来,放到自己的项目里面

1.4K60

每个开发者都应该懂一点单元测试

7 依赖注入在单元测试中的使用 上文中提到的Mock技术就是创建一个类的虚假的对象,在测试环境中用来替换掉真实的对象,但如何在测试环境下,将某个类替换成Mock的对象就需要使用到依赖注入了...,涉及到UI层面、必须要运行程序才能跑的测试叫集成测试,比如很多基于android平台的第三方UI测试框架; test和androidTest文件夹的区别:如果你是用Android Studio做开发,...(五):依赖注入,将mock方便的用起来 Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用 Android单元测试(七):Robolectric,在JVM上调用安卓的类...安卓单元测试(八):Junit Rule的使用 安卓单元测试(九):使用Mockito Annotation快速创建Mock Android单元测试(十):DaggerMock:The Power of...Dagger2, The Ease of Mockito 安卓单元测试(十一):异步代码怎么测试 Android单元测试研究与实践 Android Testing Support Library 小贴士

94130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 中构建快速可靠的 UI 测试

    在这篇文章中,我们会探索如何使用Mockito(译者注:Mockito是java编写的一个单元测试框架),Dagger 2 去创建快速可靠的Android UI测试。...我第一次在安卓应用中使用UI自动化测试是在几年前使用Robotium(译者注:Robotium是android中的一个自动化测试框架)。我认为测试环境越逼真越好。...使用Dagger注入模拟的DataManager Using Dagger to inject a mock DataManager 一旦我们明确了需要模拟什么对象,那么接下来就该考虑在测试中如何替换真实的对象...我们通过Dagger2 解决这个问题(一个Android中的依赖注入框架),如果你还没有接触过Dagger ,在继续阅读下去之前我建议你阅读使用Dagger2 进行依赖注入【英】 。...如果你不使用mock来编写上面的三个用例,几乎不可能达到这样的效果因为真实的API接口总会返回同样的数据。

    93410

    【Android】Android开发架构规范【转】

    架构规范 这是我整个系列文章从零开始搭建android框架系列的重点,所以这里放在最后面。 架构方式 是选择MVP,MVC,MVVM ,Flux还是clean 架构?,+dagger2?...对开源库的选取,一般都需要选择比较稳定的版本,还有作者在维护的项目,比如这里在github搜索image,出现的安卓中的图片加载库。...以前的框架可能会出现功能不足的情况,但是因为这点是不可预见的,所以我们选择框架时一定要了解好框架本身的扩展性如何,或者对框架有较深的理解,能够自己扩展框架, 提高架构的稳定性 架构的文档也是必不可少的。...引入Dagger2 减少模块之间的耦合性 Dagger2 是一个依赖注入框架,使用代码自动生成创建依赖关系需要的代码。减少很多模板化的代码,更易于测试,降低耦合,创建可复用可互换的模块。...通过引入** Event Bus(事件总线,这个项目使用的是otto)。它允许我们在Data Layer中发送事件,以便View Layer**中的多个组件都能够订阅到这些事件。

    1.2K90

    Android开发架构规范前言命名规范编程规范代码提交规范架构规范参考文章

    继承自安卓组件的类,一般采用父类名作为后缀, 例如:class LoginActivity extends Activity{} 自定义异常必须以Exception结尾 全局变量添加所有者前缀:实例成员变量前缀...对开源库的选取,一般都需要选择比较稳定的版本,还有作者在维护的项目 ,比如这里在github搜索image,出现的安卓中的图片加载库。...以前的框架可能会出现功能不足的情况,但是因为这点是不可预见的,所以我们选择框架时一定要了解好框架本身的扩展性如何,或者对框架有较深的理解,能够自己扩展框架, 提高架构的稳定性 架构的文档也是必不可少的。...引入Dagger2 减少模块之间的耦合性 Dagger2 是一个依赖注入框架,使用代码自动生成创建依赖关系需要的代码。减少很多模板化的代码,更易于测试,降低耦合,创建可复用可互换的模块。...通过引入** Event Bus(事件总线,这个项目使用的是otto)。它允许我们在Data Layer中发送事件,以便View Layer**中的多个组件都能够订阅到这些事件。

    1.4K80

    轻松学,听说你还没有搞懂 Dagger2

    答案显然是否定的,Dagger2 作为一款优秀的框架必须考虑到开发过程中的方方面面,不然谈何优秀呢?...Module 是模块的意思,Dagger2 中规定,用 @Provides 注解的依赖必须存在一个用 @Module 注解的类中。...,但我们之前的代码好像并没有处理 ShangjiaAModule 的创建,那么它如何创建呢?...但是,这都是基础功能,Dagger2 提供了更多的一些特性。 Dagger2 中的单例 @Singleton 我们在平常开发中经常要涉及到各种单例。...到这里的时候,Dagger2 的基础知识都介绍的差不多了,它还有一些知识点,但是应用的场景太复杂,所以没有必要细究。有兴趣的同学可以到官网上自行研究。 Dagger2 在什么地方进入依赖注入?

    2.1K20

    快刀斩乱码—— Dagger2没有想象的那么难

    缺点: 缺少灵活性,很多代码要按照既定的规则写 没有动态机制。 下面会展开对Dagger2的介绍,看看Dagger2都有哪些套路。...用来告诉Dagger我们想如何创建并提供该类型的依赖实例(一般会在方法中new出实例)。用@Provide标记的方法,谷歌推荐采用provide为前缀。...后来研究了一下发现,这个@Singleton并没有创建单例的能力,或者也可以说不是我们常规用的那种单例,直接用AClass.getInstance()就能获取一个AClass的一个全局单例。...,用这个单例的Component注入器去注入的依赖才能算是单例的。...3 总结 通过上面的内容,至少可以了解Dagger2中常用的一些注解以及组织方式,在这里做一下简单的总结: @Module提供依赖的优先级高于@Inject @Singleton并不是真的能创建单例

    1.1K20

    如何使用MVP+Dagger2+RxJava+Retrofit开发(1)

    在scope的例子中,我们用自定义的@PerActivity注解一个类,所以这个对象存活时间就和 activity的一样。...如何在MVP中使用 创建BasePresenter与BaseView MVP架构中M与V通过P进行交互,activity用来显示不再负责具体业务逻辑,职责明确,便于测试; BasePresenter与BaseView...mvp架构基本搭建,下面是如何运用dagger2; 创建提供应用实例的AppComponent 一个应用在创建时会产生唯一的Application对象,可以在应用的onCreate函数创建,下面有几个步骤...总结 创建module,一般应用于第三方包对象或者应用对象 创建Component,依赖注入器,复杂把注入对象注入到注解成员变量 构造方法注入:在类的构造方法前面注释@Inject 成员变量注入:...在类的成员变量(非私有)前面注释@Inject 开始注入调用注射器的Inject方法 详解Dagger2 Android官方MVP架构示例项目解析 dagger2 让你爱不释手

    1.6K80

    一个 2 年 Android 开发者的 18 条忠告

    转载自码农网 我仍记得2014年我决定做安卓开发的那天,这是我一生中做出的最好决定之一。到现在已经有2年半了。 最初的时候,并没有人告诉我如何做才是正确的。我犯了很多错误,浪费了很多时间。...它只是你已有知识的反映。 安卓的伟大之处就在于它是一个完全开源的平台。可以去深入研究这些代码看看他们是如何实现framework的。...Github中有成千上万的开源库,只需选择一个看看人家是如何实现的, 福利:这里是一些最佳library的列表,这里是几乎所有开源安卓app的列表。 4....分析是你最好的朋友 如果你想创建一个真正令人惊叹的app,你需要重度依赖分析工具去分析app不同部分的性能和用例。...可以从最常见的开始,比如单例,适配器模式,工厂方法模式,迭代模式,依赖注入模式,事件驱动架构,建造者模式,回调,策略模式,外观模式以及生产消费者模式。 看起来很多是吧?实际上并不多。

    51030

    一个 2 年 Android 开发者的 18 条忠告

    我仍记得2014年我决定做安卓开发的那天,这是我一生中做出的最好决定之一。到现在已经有2年半了, 最初的时候,并没有人告诉我如何做才是正确的。我犯了很多错误,浪费了很多时间。...它只是你已有知识的反映。 安卓的伟大之处就在于它是一个完全开源的平台。可以去深入研究这些代码看看他们是如何实现framework的。...Github中有成千上万的开源库,只需选择一个看看人家是如何实现的, 福利:这里是一些最佳library的列表,这里是几乎所有开源安卓app的列表。...分析是你最好的朋友 如果你想创建一个真正令人惊叹的app,你需要重度依赖分析工具去分析app不同部分的性能和用例。...可以从最常见的开始,比如单例,适配器模式,工厂方法模式,迭代模式,依赖注入模式,事件驱动架构,建造者模式,回调,策略模式,外观模式以及生产消费者模式。 看起来很多是吧?实际上并不多。

    1K80

    你们要的高级面试题来了,30K月薪?安排!

    是怎么评测和具体优化的? 一、App启动速度优化 二、App绘制优化 三、App内存优化 四、App瘦身 五、App电量优化 六、网络优化 七、安卓的安全优化 2、为什么WebView加载会慢呢?...(提示:init进程 -> Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程) 6、启动一个程序,可以主界面点击图标进入,也可以从一个程序中 跳转过去,二者有什么区别...五、设计模式与架构设计 1、设计模式 2、架构设计 六、其它高频面试题 1、保活方案 2、Android动画框架实现原理。...6、Android的生命周期和启动模式 7、ListView和RecyclerView系列 8、如何实现一个推送,消息推送原理?推送到达率的问题? 9、动态权限系列。 10、自定义View系列。...11、对谷歌新推出的Room架构。 12、没有给权限如何定位,特定机型定位失败,如何解决? 13、Debug跟Release的APK的区别?

    47840

    Dagger2 入门解析

    再一个是,Dagger2不同于guice的运行时注入,编译时生成代码的做法很好。提前发现问题,更高的效率。 还是那句话,百度到的dagger2资料看着一大堆,大都表层,而且和Android集成很深。...注入原理 编译时扫描注解,生成对应的builder和factory。这点和spring不同,spring是运行时通过反射生成instance。另一个问题就是由于是静态工厂,那么就不能动态绑定了。...@Provide: 在modules中,我们定义的方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。...在scope的例子中,我们用自定义的@PerActivity注解一个类,所以这个对象存活时间就和 activity的一样。...现在不研究Dagger2是如何根据注解去生成工厂的,先来看看工厂是什么东西,理解为什么可以实现了DI(Dependency Injection),如何创建IoC(Inverse of Control)容器

    1.5K120

    Android 之dragger使用

    2、依赖可以注入到一个组件中:我们可以注入这些依赖的模拟实现,这样使得测试更加简单。 3、app中的组件不需要知道有关实例创建和生命周期的任何事情,这些由我们的依赖注入框架管理的。...我觉得,dagger2这样的依赖注入框架对MVP架构来说,是最好的解耦工具,可以进一步降低modle-view-presenter之间的耦合度。...接下来,分解这张图: AppComponent: 生命周期跟Application一样的组件。可注入到自定义的Application类中,@Singletion代表各个注入对象为单例。...inject方法将Activity注入到ActivityComponent中,通过该方法,将Activity中需要注入的对象注入到该Activity中。...我建议使用这种方式,对于不同的Activity,创建各个对应的ActivityCompontent,同时把Presenter(Biz)注入到Component的视图中,这也是dagger2推荐的做法,Dagger

    974100

    Jetpack新成员,一篇文章带你玩转Hilt和依赖注入

    我第一次清晰地意识到自己迫切需要一个依赖注入框架,是我在使用MVVM架构来搭建项目的时候。 在Android开发者官网有一张关于MVVM架构的示意图,如下图所示。 ?...这就更扯了,因为Activity和ViewModel通常都是一一对应的。 所以最后我发现,没人应该负责创建仓库的实例,最简单的方式就是将仓库设置成单例类,这样就不需要操心实例创建的问题了。...我们在MainActivity中并没有去创建Truck的实例,只是用@Inject声明了一下,结果真的可以调用它的deliver()方法。 这就是Hilt给我们提供的依赖注入功能。...ViewModel的依赖注入 到目前为止,你已经将Hilt中几乎所有的重要知识点都学习完了。 做事情讲究有始有终,让我们回到开始时候的一个话题:在MVVM架构中,仓库层的实例到底应该由谁来创建?...注意,以下代码只是做了MVVM架构中与依赖注入相关部分的演示,如果你还没有了解过MVVM架构,或者没有了解过Jetpack组件,可能会看不懂下面的代码。

    2.6K30

    Andriod-Dagger2

    一般的IOC框架都是通过反射来实现的,但Dagger2作为Android端的IOC框架,为了不影响性能,它是通过apt动态生成代码来实现的。其主要作用就是解耦和管理实例对象。...即使这是通过接口而不是具体类型完成的,它打破了依赖注入的核心原则:一个类不应该知道如何实现依赖注入。...在面向对象的思想中,我们碰到这种情况一般都要抽取父类,Dagger2也是用的这种思想,我们先创建一个BaseModule,用来提供工具类: @Module public class BaseModule...,注意我们在创建相关Component的时候多了.baseComponent()方法,其参数就是我们在Application中创建的BaseComponent对象,来确保全局单例。...()在Component中是单例的,所以每次注入的都是同一个实例,所以只会调用一次module中的方法。

    2.2K10

    15 个 Android 通用流行框架大全

    和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的ORM解决方案 ActiveAndroid...的替换品 7 依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java快速依赖注射器。...AndroidAnotations 快速安卓开发。...易于维护 RoboGuice Android平台的Google Guice 8 图表 名称 描述 WilliamChart 创建图表的Android库 HelloCharts 兼容到API8的Android...Queue 一个专门为Android轻松调度任务的工作队列 10 事件总线 名称 描述 EventBus 安卓优化的事件总线,简化了活动、片段、线程、服务等的通信 Otto 一个基于Guava的增强的事件总线

    1.5K60

    Dagger2的轻松愉悦解析

    Dagger2,依赖注入框架,一个刚接触时感觉麻烦,用久了就会“嘴上说不要,身体却很诚实”的开发润滑剂(◐‿◑)。...(本文为拖更而生) 一、Dagger2 介绍 1、为什么使用dagger2  谁用谁知道Σ( ̄。... ̄ノ)ノ,如丝般顺滑,奶不死的Dagger2 ,主要优势体现在: 解决项目中多实例依赖创建问题,如:new A(new B(new C()))。...困了我们就开始咯 2、简单原理介绍  Dagger2 可以理解为一套开发规范,遵守这套规范编写的代码,通过Dagger2 的运行时注解,在编译时自动生成模版代码,已达到注入和复用的目的。  ...图12  真正的单例效果, 是下图13中在 ToDoApplication 中 DaggerTasksRepositoryComponent 的创建。

    51510
    领券