枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述安卓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 andThentrue 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.0val infos = HashMap< Int, Double> () infos[8] = 5.0 infos[5] = 10.0 infos[1] = 1.0assertEquals(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].timefor (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 5every { path.last().time } returns 90000 every { path[0].beacon } returns 1 every { path[0].time } returns 50000every { path[1].beacon } returns 2 every { path[1].time } returns 60000every { path[2].beacon } returns 3 every { path[2].time } returns 70000every { path[3].beacon } returns 4 every { path[3].time } returns 80000every { path[4].beacon } returns 5 every { path[4].time } returns 90000val rating: HashMap< Int, Double> = HashMap() rating[1] = 0.25 rating[2] = 0.25 rating[3] = 0.25 rating[4] = 0.25assertEquals(rating, SISSIController.instance.normalize(path)) }
【安卓Kotlin单元测试/ Collection, ArrayList依赖的解耦/ MockK】
推荐阅读
- Unity移动端入门 - Android那些事
- linux rand application
- Part-Appium-1
- 安装cnpm后运行报cnpm : 无法加载文件 C:UsersyizonAppDataRoamingpmcnpm.ps1,因为在此系统上禁止运行脚本
- djang项目中的疑问及解决办法(ValueError: Invalid model reference 'apps.user.User'. String model referenc
- 获取app的应用包名和入口页面
- Android SDK Tools,Platform-tools,Build-tools分别有什么作用()
- springboot启动时报错 错误: 找不到或无法加载主类 com.xxx.xxx.Application
- HBuilder搭建Android模拟器