Android测试体系-在MVVM架构中如何测试Model层与ViewModel层

背景

此文章是对于google code lab中《Introduction to Test Double and Dependence injection》 与 《Testing Basics》的总结,本篇主要讲述如何在mvvm架构的android项目中对Model层以及ViewModel层进行测试

Model层

为什么要测它

model层作为数据获取层,主要与network和数据库打交道,我们需要测试其对数据的获取和更新操作逻辑的正确性

测它的时候会遇到什么问题

如上所述,Model层通常和数据库和网络有较强相关性,我们需要测试的只是其对数据的处理逻辑。

如何解决

改变数[……]

Read more

项目的升级-给RemoveButterKnife插件增加新功能

前言

经过项目的初步编写和进一步改造,RemoveButterKnife插件终于也有模有样了,但是,功能上仅仅支持Activity/Fragment的BindView注解。

关于编写和优化的过程可以看下面两篇文章
项目构造RemoveButterKnife
项目改进-重构RemoveButterKnife
当然,这里也附上这个项目的github地址

为了让插件支持更加彻底,我们还要支持组合自定义view以及viewholder中使用butterknife的情况,当然,我们也要支持OnClick注解以及一些其他的使用场景。

要增加哪些功能?

首先要确定需要增加哪些功能点,功能点的更新如[……]

Read more

项目的改造——RemoveButterKnife插件代码的重构

前言

这篇文章记述了我的插件RemoveButterKnife的代码改进过程以及思路,关于插件,各位可以看RemoveButterKnife代码库,关于文章,可以看RemoveButterKnife从构思到实现

原因

近期想给原来的插件RemoveButterKnife加入一些新的功能,发现以前的代码没有使用任何的设计模式,全部功能都写在一起,对于新功能的添加来说十分糟糕。趁此机会重构了一下代码,在此记录过程。

具体步骤

插件主要分为三个部分
1. 主插件入口部分
2. 代码寻找/处理部分
3. 代码生成部分

1. 主插件入口部分

我们首先看第一部分,主入口部分,这部分内容主要代[……]

Read more

Android开发中的MVP模式概念以及网络请求实现顺序

MVP模式

三层

1.view
2.presenter
3.model

View

1.view职责,继承view接口,实现方法,持有presenter,this传入presenter

Presenter

2.presenter职责,实现databridge接口,接收view实现,处理逻辑,完成后使用view回调,与model交互,this传入model实例

Model

3.model职责,接收databridge实现,做网络请求,调用databridge实例做回调

结构如上图

1`7.view层创建presenter实例,并实现view接口
2.presenter层接收[……]

Read more

React Native Windows平台配置+接入typescript总结

配置

1.根据https://facebook.github.io/react-native/docs/getting-started.html的配置来进行初步设置
2.设置完毕后如果出现各种网络请求错误/拉取错误,使用android studio打开android目录,进行一次拉取
3.完毕之后再运行react-native run-android会遇到500错误,这是由于reactnative的版本错误造成的,按照下面步骤执行命令

接入typescript

1.在项目目录下运行命令行
2.执行以下指令

[crayo[……]

Read more

AndroidStudio报错dl.google.com:443 访问失败解决方案

这个问题分两种情况:

1.网络问题

这是由于访问网络不通畅引起的,需要设置代理解决,这也是最常见的一种,无需赘述

2.gradle中文路径问题

这种情况虽然也报错访问失败,但其实不是网络问题,打开setting,找到gradle选项卡,查看里面的路径是否包含中文,全部改成英文,即可解决,如下图。

[……]

Read more

Android架构–测试选择

需要用到的测试工具库

1.espresso google官方提供的一个ui测试库
2.mockito 一个可以模拟各种类并进行注入/返回的库
3.junit 测试常用库

View的测试

使用espresso测试,espresso是一个谷歌官方推出的测试库,可以模拟进行各种ui操作,并判断组件状态。
例子

关于espresso的使用详见官方手册,这里只做引出,如果要做进一步测试,可以用mock来模拟一个ViewModel并inject来进行测试。

ViewModel

ViewModel部分与repositor[……]

Read more

Android架构体系–样例解析

接上一篇文章的概念分析的内容,这篇文章主要给出一个实际的mvvm例子来分析。

上一篇文章在这里Android架构体系–结构和组件选择

样例目的

通过mvvm模式和room(google提供的持久化库)来进行user类的显示/添加功能

结构

view:MainActivity(显示user),AddNewUserActivity(添加user)
viewmodel:UserViewModel(负责与model层通信,持有repository实例,并提供获取/插入user的操作)
model:user(实例类),userdao,appdatabase(初始化数据库实例类),userrep[……]

Read more

Android架构体系–结构和组件选择

Android架构的必要性

随着业务的发展,Android以前那种瀑布流式的开发模式的弊端越来越明显,例如
1.无法拆分逻辑和页面
都写在Activity中,无法拆分,非常混乱
2.无法测试等
由于界面和逻辑连在一起,无法写出良好的单元测试
3.过长的Activity代码
由于各种逻辑都在一起,经常会有三四百行的超长文件

Android官方解决方法 

这时候我们就需要对项目进行良好的架构来解决这些问题,Android官方提出MVVM架构模式并推出了诸多工具来实现,与最初不同的是,android官方推出了多个新的工具库来解决实现过程中的问题。

什么是MVVM

将整个项目分为三个层次
V[……]

Read more