All Projects → openhkr → EasyUtAndroid

openhkr / EasyUtAndroid

Licence: other
Android unit testing example 全面的android应用单元测试方法及案例

Programming Languages

java
68154 projects - #9 most used programming language
kotlin
9241 projects
PureBasic
71 projects

Projects that are alternatives of or similar to EasyUtAndroid

Androidut
Android开发中必要的一环---单元测试(Unit Test)
Stars: ✭ 419 (+1895.24%)
Mutual labels:  mvp, mockito, junit, robolectric
Android-Starter-Kit
This is up-to-date android studio project for native android application, that is using modern tools and libraries.
Stars: ✭ 16 (-23.81%)
Mutual labels:  mvp, mockito, robolectric
Starwars-clean
Simple project with clean architecture
Stars: ✭ 34 (+61.9%)
Mutual labels:  mvp, mockito, junit
Android Gif Example
Gif RecyclerView in MVP using Dagger 2 + Retrofit 2 + Moshi + RxJava 2 + Glide 4 with JUnit and Espresso tests written in Kotlin + Kotlin DSL!
Stars: ✭ 334 (+1490.48%)
Mutual labels:  mvp, junit, robolectric
Androidunittest
Save time & clear your unit tests on Android !
Stars: ✭ 205 (+876.19%)
Mutual labels:  unit-testing, junit, robolectric
Kotlin Android Starter
[Kotlin Android] Kotlin Android starter based MVP/Dagger2/RxJava2/Robolectric/Espresso/Mockito. It provides a generator to fast create a Kotlin Android project.
Stars: ✭ 589 (+2704.76%)
Mutual labels:  mvp, mockito, robolectric
Test Smells
Test Smells for Android developers
Stars: ✭ 120 (+471.43%)
Mutual labels:  unit-testing, junit, robolectric
Marvel
Marvel Characters Android Application Assigned by smava GmbH
Stars: ✭ 227 (+980.95%)
Mutual labels:  mvp, mockito, robolectric
Android tmdb clean architecture
Showcase of clean architecture concepts along with Continuous Integration and Development for modular Android applications. Includes test suits (functional and unit tests) along with code coverage.
Stars: ✭ 63 (+200%)
Mutual labels:  mvp, mockito, robolectric
Mvvm Kotlin Android Architecture
MVVM + Kotlin + Retrofit2 + Hilt + Coroutines + Kotlin Flow + mockK + Espresso + Junit5
Stars: ✭ 1,014 (+4728.57%)
Mutual labels:  mvp, mockito, junit
Avenging
MVP pattern example on Android: no Dagger or RxJava example
Stars: ✭ 279 (+1228.57%)
Mutual labels:  unit-testing, mvp, mockito
Weather-Guru-MVP
Sample Material-design Android weather application build with MVP architectural approach using Dagger2, RxJava2, Retrofit2, Event-Bus, GreenDao, Butterknife, Lottie etc.
Stars: ✭ 15 (-28.57%)
Mutual labels:  mvp, mockito, robolectric
Truth
Fluent assertions for Java and Android
Stars: ✭ 2,359 (+11133.33%)
Mutual labels:  unit-testing, junit
mvp-sample
Demonstrates how to implement MVP (Model View Presenter) pattern using Kotlin, RXJava, Retrofit, Dagger and DataBinding
Stars: ✭ 35 (+66.67%)
Mutual labels:  mvp, mockito
Kotlinmvparchitecture
Clean MVP Architecture with Dagger2 + Retrofit2 + Mockito + Fresco + EasiestGenericRecyclerAdapter using Kotlin. Added Unit Tests(Kotlin Tests)!
Stars: ✭ 143 (+580.95%)
Mutual labels:  unit-testing, mvp
AndroidStarterAlt
A sample View-based Android app using the MVP architecture. It uses Mosby, Dagger2, RxJava, retrofit, LoganSquare, requery, EventBus, Conductor.
Stars: ✭ 27 (+28.57%)
Mutual labels:  mvp, mockito
travis-ci-tutorial-java
Just to learn how to use travis-ci in a java project!
Stars: ✭ 38 (+80.95%)
Mutual labels:  junit, jacoco
Android-MVVM-News-App
MVVM News Application with clean code architecture & android jetpack components.
Stars: ✭ 38 (+80.95%)
Mutual labels:  mockito, robolectric
Spectrum
A BDD-style test runner for Java 8. Inspired by Jasmine, RSpec, and Cucumber.
Stars: ✭ 142 (+576.19%)
Mutual labels:  unit-testing, junit
springboot-rest-api-angularjs-https
REST API https with Spring Boot and Angular JS. Use MySQL, Hibernate and Spring Security.
Stars: ✭ 38 (+80.95%)
Mutual labels:  mockito, junit

EasyUtAndroid

全面的android应用单元测试方法及案例 1.0版本 结合Junit Mockito与Robolectric实现对MVP架构下数据层,视图层,逻辑层覆盖率100%的全面单元测试

环境搭建

由于基于Android sdk 环境的安卓单元测试存在依赖安卓设备,需要打包安装,运行速度慢等原因,故单元测试选型为Junit与mockito相结合并配合robolectric基于纯Java环境下的单元测试。 首先在build.gradle文件的dependencies下添加test依赖,对于担心添加依赖影响安卓apk安装包大小的同学可以不必担心,因为testCompile的依赖仅供test文件使用,是不会打包的apk中的。如果你愿意,其实添加多少test依赖都无所谓。

testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.9.5"
testCompile 'org.robolectric:robolectric:3.3.2'
testCompile 'org.robolectric:shadows-support-v4:3.0'

依赖添加完成不要忘记点击工程右上角Sync Now 来同步 如果testCompile依赖下载很慢,可以尝试在整个工程的build.gradle文件下修改Jcenter()如下

repositories {
    jcenter(){ url 'http://jcenter.bintray.com/'}
    mavenCentral()
}

原理其实很简单,Jcenter默认是以https形式进行从仓库下载资源,这里是修改其下载资源的url为http。 同理由于robolectric需要从oss.sonatype.org下载一些必要的依赖包,但是oss.sonatype.org是国外的网站,下载速度感人。这里同样需要修改整个工程的build.gradle文件,不过这次是修改maven{}为阿里云的代理。

gradle task使用方法如下图

  对于私有变量private的测试

//因为提示框 dialog 在 view 中属于私有变量,不需要对外暴露方法,如果为了测试而写一个get set 方法似乎太过牵强 //所以采用 Java 反射的方法获取dialog对象

    view.showTelDialog();
    try {
        // /通过类的字节码得到该类中声明的所有属性,无论私有或公有
        Field field = WeatherHelpCenterImpl.class.getDeclaredField("telDialog");
        // 设置访问权限(这点对于有过android开发经验的可以说很熟悉)
        field.setAccessible(true);
        // 得到私有的变量值
        Object dialog = field.get(view);
        TConfirmDialog telDialog = (TConfirmDialog) dialog;

        //获取到Dialog对象之后,再通过反射获取Dialog中TextView对象
        Field fieldDialog = TConfirmDialog.class.getDeclaredField("tvTitle");
        // 设置访问权限
        fieldDialog.setAccessible(true);
        //获取telDialog中的TextView对象
        Object title = fieldDialog.get(telDialog);
        TextView tvTitle = (TextView) title;
        //通过assert方法验证标题
        assertEquals("验证标题",tvTitle.getText().toString(),"客服电话");

        //获取到Dialog对象之后,再通过反射获取Dialog中TextView对象
        fieldDialog = TConfirmDialog.class.getDeclaredField("tvConfirm");
        //获取telDialog中的TextView对象
        Object confirm = fieldDialog.get(telDialog);
        TextView tvConfirm = (TextView) confirm;
        //通过assert方法验证标题
        assertEquals("验证确定按钮",tvConfirm.getText().toString(),"拨打电话");

        //获取到Dialog对象之后,再通过反射获取Dialog中TextView对象
        fieldDialog = TConfirmDialog.class.getDeclaredField("tvCancel");
        //获取telDialog中的TextView对象
        Object cancel = fieldDialog.get(telDialog);
        TextView tvCancel = (TextView) cancel;
        //通过assert方法验证标题
        assertEquals("验证取消按钮",tvCancel.getText().toString(),"取消");


    } catch (Exception e) {
        //error
    }   

问题反馈回执:

  感谢Jaggerer同学的反馈,为了响应谷歌kotlin第一开发言语的号召,同时也因为java8 Optional需要api 24以致无法广泛推广等原因,工程中对数据判空类 WeatherDataConvert参与了kontlin编写,愿意尝试kontlin的同学可以使用Android Studio下载Kotlin相关插件

执行 Settings -> plugins -> BrowseRepositories中搜索“Kotlin”

  暂时还不愿意下载插件的同学可以将WeatherDataConvert转成java文件以使用。

public class WeatherDataConvert {

public WeatherViewData convertData(WeatherData netData){

    WeatherViewData viewData = new WeatherViewData();
    if(null!=netData.getData()&&null!=netData.getData().getTemperature()){
        viewData.setTemperature(netData.getData().getTemperature());
    }else {
        viewData.setTemperature(0.0);
    }
    if(null!=netData.getData()&&null!=netData.getData().getWeatherType()){
        viewData.setWeatherType(netData.getData().getWeatherType());
    }else {
        viewData.setWeatherType(1);
    }
    if(null!=netData.getData()&&null!=netData.getData().getUltraviolet()){
        viewData.setUltraviolet(netData.getData().getUltraviolet());
    }else {
        viewData.setUltraviolet(0);
    }
    if(null!=netData.getData()&&null!=netData.getData().getRainfall()){
        viewData.setRainfall(netData.getData().getRainfall());
    }else {
        viewData.setRainfall("0");
    }
    if(null!=netData.getData()&&null!=netData.getData().getHourTemperature()){
        viewData.setHourTemperature(netData.getData().getHourTemperature());
    }else {
        viewData.setHourTemperature("10");
    }
    if(null!=netData.getData()&&null!=netData.getData().getWindPower()){
        viewData.setWindPower(netData.getData().getWindPower());
    }else {
        viewData.setWindPower("2");
    }
    return viewData;
}

}

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].