单元测试才是绩效的保命符
1.背景:
昨日edi值班时,线上发现之前写的CsvParser有问题,问题是错把引号内的逗号也当作分隔符处理了,导致csv中的信息错位。
2. 处理
- 改为commons-csv第三方jar包来解析,本地测试可以正常解析带引号的csv。
- 发到测试环境发现也可以,准备上线。
- 上线前发现commons-csv插件在解析带引号的列时,会把引号去掉,于是想回滚,在原来的基础上进行修改。
- 后跟阳哥确认后,阳哥指出我们当时用的“is_remove_quote”这个属性原因其实是我们起初设计的不足,才被迫引入的。并且线上已有的节点的该属性都是true,这就说明在此之前没有人需要保留引号。
- 阳哥讨论过后,执行上线。
- edi开发人员发现线上最新的一单在进行CSV解析时缺少了首行。
- 我在本地紧急修改后,测试再次上线。
- 线上再次下单,然后验证正常。
3. 总结
- 有时候起初的设计可能是错误的,没必要为了这个错误的设计再去延续。
- CSV缺少首行的问题本地测试没有发现原因还是由于正确的单元测试。临时写的单元测试比较仓促,考虑和关注的范围的比较窄。以后写单元测试需要写完备,且通过Assert语句抛出异常。