安卓Kotlin单元测试/ Collection, ArrayList依赖的解耦/ MockK

本来这种依赖的解耦很复杂,以为不能实现。

原来,要了解for的运行机制,然后进行mock,就可以实现单元测试。

1. 这里是通过迭代遍历Collection。

需要的是.size和.iterator.hasNext()。

    fun getBeaconsInfo(beacons:Collection<Beacon>):HashMap<Int,Double>{
        var infos = HashMap<Int,Double>()

        if (beacons.size > 0) {
            for(beacon in beacons){
                infos.put(beacon.id3.toInt(),beacon.distance)
            }
        }

        return infos
    }

使用了Kotlin测试工具Mockk

    @Test
    fun getBeaconsInfo1(){
        val beacons = mockk<Collection<Beacon>>()

        every { beacons.size } returns 3
        every { beacons.iterator().hasNext() } returns true andThen true andThen  true andThen false
        every { beacons.iterator().next().id3.toInt() } returns 8 andThen 5 andThen 1
        every { beacons.iterator().next().distance } returns 5.0 andThen 10.0 andThen 1.0

        val infos = HashMap<Int, Double>()
        infos[8] = 5.0
        infos[5] = 10.0
        infos[1] = 1.0

        assertEquals(infos,SISSIController.instance.getBeaconsInfo(beacons))
    }

2. 这里是单纯for循环。

此外,我这里用到了.last()

需要的是.size和isEmpty()。

    fun normalize(path: ArrayList<Arrival>): HashMap<Int, Double> {
        var rating:HashMap<Int,Double> = HashMap()
        var sum = path.last().time - path[0].time

        for (i in 1 until path.size) {
            rating.put(path[i - 1].beacon, (path[i].time - path[i - 1].time).toInt() * 1.0 / sum)
        }

        return rating
    }
    @Test
    fun normalize() {
        val path = mockk<ArrayList<Arrival>>()

        every { path.isEmpty() } returns false
        every { path.size } returns 5

        every { path.last().time } returns 90000
        every { path[0].beacon } returns 1
        every { path[0].time } returns 50000

        every { path[1].beacon } returns 2
        every { path[1].time } returns 60000

        every { path[2].beacon } returns 3
        every { path[2].time } returns 70000

        every { path[3].beacon } returns 4
        every { path[3].time } returns 80000

        every { path[4].beacon } returns 5
        every { path[4].time } returns 90000

        val rating: HashMap<Int, Double> = HashMap()
        rating[1] = 0.25
        rating[2] = 0.25
        rating[3] = 0.25
        rating[4] = 0.25

        assertEquals(rating, SISSIController.instance.normalize(path))
    }

原文地址:https://www.cnblogs.com/ppCola/p/11902308.html

时间: 2024-08-06 23:42:34

安卓Kotlin单元测试/ Collection, ArrayList依赖的解耦/ MockK的相关文章

安卓应用单元测试技术分享

使用ThreadingTest进行安卓应用单元测试 1.Android单元测试的编写 Android单元测试有两种方法,首先作为java程序,可以试用JUnit Test进行测试,另外也可使用Android JUnit Test进行单元测试. 1).JUnit Test进行单元测试 JUnit对Android应用程序进行单元测试需要使用Java命令来启动或者在eclipse里面将启动的Bootstrap Entries改为JRE,但是这种只能测试逻辑代码,因为是是运行在JVM上,而不是Andro

Android注解使用之Dagger2实现项目依赖关系解耦

前言: 最近牵头发起公司app的重构工作,如何通过重构让项目的耦合降低.开发效率提高,一直是我努力的方向,今天来学习一下一个注解框架Dagger2,然后看看如何使用它来降低项目的耦合. Dagger2 一句话:一款快速的注解框架,应用于Android.Java,由 Google 开发和维护,是 Square 的 Dagger 项目的分支. gitHub:https://github.com/google/dagger Dagger2采用依赖注入方式,依赖注入是一种面向对象的编程模式,它的出现是为

安卓的单元测试

在安卓工程中如何进行单元测试,这其实很简单.. 首先第一步定义个一个测试类继承于AndroidTestCase 然后第二步在清单文件中作如下的配置 <application <uses-library android:name="android.test.runner" /> </application> <instrumentation android:name="android.test.InstrumentationTestRunne

安卓开发 第一篇 关于依赖注入框架dagger2的使用和理解

(这篇博客真是磨难重重啊,写到一半电脑蓝屏了,还好markdown编辑器保持了部分类容) 最近开始重构项目,在重构项目中用到了依赖注入框架dagger2,发现它确实很方便,能大大加快我们编写代码的速度,同时也很方便我们对于功能模块的解耦.在这里就不过多介绍dagger2了,大家谷歌 百度一下就能得到很多关于dagger2的介绍.学习dagger2是需要一定的学习成本的,我自己开始学习的时候也差不多花了一周的时间才弄明白怎样使用dagger2,下面就说说自己对dagger2的理解和使用方法. da

安卓系统短信源码依赖库、可运行的源码

安卓系统短信源码库  点击打开链接 安卓系统短信源码  点击打开链接 新项目需要做短信模块功能,此短信模块非安卓系统短信模块,是利用了360张勇主导的开源框架,进行URL拦截,剥离出来的短信模块 第一步: 去下载安卓系统源码,通过对比4.4和4.4+版本的源码,果断用了4.4的源码,为什么呢?因为4.4短信源码类少,将来bug少,短信模块的代码如下截图 第二步: 我就拿As来说把(我起初是在eclipse上调试好的,后来移到As上),将上面几个类导入进来,肯定是bug挺多的,后来在源码里找到关联

Collection ArrayList

一. 源码分析 1.  ArrayList 类组成 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable // 1. 实现了List接口,List继承Collection接口,Collection接口继承Iterable接口 { private static final long serialV

使用ThreadingTest进行安卓应用单元测试

1.Android单元测试的编写 Android单元测试有两种方法,首先作为java程序,可以试用JUnit Test进行测试,另外也可使用Android JUnit Test进行单元测试. 1).JUnit Test进行单元测试 JUnit对Android应用程序进行单元测试需要使用Java命令来启动或者在eclipse里面将启动的Bootstrap Entries改为JRE,但是这种只能测试逻辑代码,因为是是运行在JVM上,而不是Android系统中,所以不能测试Android有关的代码.

【腾讯Bugly干货分享】安卓单元测试:What, Why and How

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d28349101cd07a5404c415 Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师.每周都会举行嘉宾分享,话题讨论等活动. 本期,我们邀请了蘑菇街 Android 开发工程师——小创,为大家分享<安卓单元测试:What, Why and How>. 分享内容简介: 单元测试一直是软件开发过程中保证软件质量.提高

Jenkins+Maven动态工程构建--第三方服务依赖解耦的一种思路

持续集成是敏捷领域的一项基本实践,Jenkins是目前市面上主流的持续集成工具.关于持续集成和Jenkins可以讨论的话题很多,本文描述的是一种使用Jenkins结合Maven进行动态工程构建的思路,用于进行系统开发过程中对第三方服务依赖的解耦. 一.  场景 在系统设计和实现过程中,尤其是涉及到多方集成的系统开发,我们经常会遇到这样的场景:即目标系统需要依赖于某些第三方的服务实现,而这些第三方的服务实现通常有其进度安排,会和目标系统平行开发,也就是说在目标系统开发调试过程中,第三方服务往往还无