android 端真的需要写单测吗

2018-01-25 14:25:20 +08:00
 masterAtyan

android 端一般业务逻辑少,比较多的是 UI 和线程切换以及网络请求, 我更推崇自动化测试,在真机上自动化运行 apk,这样才能暴露更多的问题

4468 次点击
所在节点    程序员
34 条回复
ai277014717
2018-01-26 10:33:48 +08:00
写单元测试能提高产品质量,主要看公司主管有没有想法有没有预算。自己的话就不要折腾了。拿那么点工资没必要因为写个单测费神费力。
masterAtyan
2018-01-26 11:37:20 +08:00
@blless 理论上确实什么代码都可以写单测
GoodRainChen
2018-01-26 11:39:55 +08:00
GoodRainChen
2018-01-26 11:42:11 +08:00
@blless 不小心提前发出去了,客户端目前写单元测试最大的难点在于确定输入输出。输入是用户的操作,输出是界面的展示,以目前常见的框架来说,想要仿造用户输入还算简单,但是检验界面展示就非常困难。至于逻辑很少很少,几乎没有单元测试的价值
masterAtyan
2018-01-26 11:44:39 +08:00
@ShareDuck 主要讨论的是 android 端单测,后端由于业务逻辑繁杂,确实有必要用单测保证自己改完单测逻辑的正确性,但 android 端说到底逻辑层面上确实复杂性不高
vjnjc
2018-01-26 12:01:49 +08:00
首先你要让你的代码 testable,意思就是说代码要写的好,不要有全局变量或者 android 包的关联。这样的代码才适合单元测试。

然后某些逻辑有一定复杂性,比如我客户端有个加密逻辑,这个实现单元测试挺好的。像界面跳转,http 请求都不适合。
masterAtyan
2018-01-26 12:23:28 +08:00
@vjnjc 我比较赞同,android 平台无关的可以写单测,android 端单测给我最大的收益是注意区分平台相关性代码,将平台相关性代码解耦,只是解耦平台相关性代码并非需要单测才能保证
yuriko
2018-01-26 12:55:39 +08:00
虽然理论上都能写,而且 android 相关的代码谷歌也有给对应的打桩工具
但真的写起来太蛋疼,尤其客户端业务逻辑变化太快了,单测很多最后都是变成给自己平白无故增加劳动量
我更倾向于单纯整理测试用例然后人工测试
hantsy
2018-01-26 21:58:36 +08:00
@DeweyReed 国内要求写测试的公司估计不到 1%吧,个人多年前在公司上班的时候推广过 Junit,遭到一致反对。

Java 测试工具架构真的太成熟了。一般 Java EE 和 Spring 程序 Backend 都很好写测试。但个人也不喜欢写 Web UI 的测试,HTML WebDriver 之类,但这类传统的 MVC 项目现在基本遇不到了,基本都是用 REST API+ 前端 SPA 程序,REST 测试工具框架太多了。

至于 Android 这种 UI 为主写测试真不容易,国内写的人更少了。代码必须低耦合,每个类功能要足够简单清晰。说白了,要做软件设计的最基本的 SOLID。
hantsy
2018-01-26 22:00:59 +08:00
@vjnjc 跳转,HTTP 这些都可以 Mock 和 Spy,应该检测输入和输出是否正确。
hantsy
2018-01-26 22:19:26 +08:00
@likuku
@WispZhan 是的,比如 6 个月的项目,短期两三周可能看不到什么效果。但如果一开始就严格写测试(和写一些脚本,不断调整,实现项目 CI、CD 自动化),后来的开发才能越来越容易。

国内大多数团队都急于在一两个星期做界面(不好听的话,就一张皮)出来给领导看,后面代码量一上去,整个项目代码就成滥泥一样,天天加班就是拆东墙补西墙,哪有什么代码质量,Maintainable,Testable 可言。

至于说写测试是浪费时间的说法,以我的个人经验(你不必认同)可以说,不写测试,从一个项目整体生命周期计算,你 70%的时间都在浪费时间,而且代码根本没质量而言。
20015jjw
2018-01-27 04:46:55 +08:00
写 为什么不写 我知道的硅谷大公司都写
masterAtyan
2018-01-27 21:46:40 +08:00
@hantsy 不反对测试对工程质量的保证,但一个人的软件水平是逐步提升的,一开始架构可能设计的不够好,最简单的来说看了 阿里程序员手册,发现方法名,类权限,方法的权限( private,public )以前写的不够好,如果我们想换单测必须写的跟在换。

不可否认 Testable 的代码确实很优雅,但优雅的代码不一定非要通过写单侧实现,尤其是 android 端的单测难写又复杂,写起来可不不是 JUnit 这些成熟的框架可比。

写单测只是说能让你发现代码设计的不合理的地方,但怎么修改还是需要去阅读大量的开源项目(优雅的代码)才能知道怎么去修改。

只是说 android 端单测耗费时间长罢了,有这些时间我们不如多读一本书,多看写源码来的实在,单测在大公司其实是一种 KPI 导向的推动,我们写出优雅的代码,大部分是模仿优秀的项目,而不是写单测
hantsy
2018-01-28 11:40:40 +08:00
@20015jjw 应该是大小公司都会要求测试吧。。。但不尽一样,大公司,如 IBM 这种,除了基本程序员自己应该写测试外,一般项目都有要求用户界面层面的功能测试,基本上都是先由一些业务专家写的测试规范,然后有一些测试人员专门进行(大公司也有很多专业工具辅助的,比如 HP 的测试工具)功能测试 。

小公司 /Startup,更倾向 Geek 文化和 Engineering 文化,XP,TDD, 不断 Refactoring 等,工具优先,整个软件开发生命周期都是力求没人工干预,自动化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX