2.4 单元测试有那么重要吗?

一段测试代码
你有没有写过单元测试,你的单元测试是不是这样的?
下面是一个登录测试的过程:
https://codingapi.github.io/blog/2020/03/01/codingapi-test/
执行过程如下:
数据的检查
测试数据导入
测试代码
数据回滚及清理
上述代码的问题:
过度依赖环境
上述单元测试中必须要保护mysql、mongodb服务
过度依赖数据
上述单元测试必须依赖登陆的用户数据,才能完成登陆的单元测试
数据恢复与回归
如果采用了不支持事物的数据库,例如NOSQL,那么将会更加难以控制
开发过程
开发环境→测试环境→生产环境
上述单元测试的过程,会因为各种环境之间的差异导致单元测试很难兼容,从而团队也就无法推动单元测试的落地,致使系统一直在“裸奔”。
单元测试的重要性
质量保证:单元测试是非常重要的软件质量的保障体系,主要看代码的覆盖率和代码的单元测试断言的结果。
简化调试:当出现问题时,有了单元测试,可以更快速地定位到问题发生的具体位置,大大提高了调试的效率。
改进设计:有一种开发方式叫做测试驱动开发。有了单元测试,会促使开发者写出更加易于测试、易于维护的代码。很多时候你可能暂时不清楚实现过程,但是清楚实现的效果。
文档作用:单元测试也是一种形式的文档。其他开发者可以通过查看单元测试,快速理解一个函数或者模块的功能和使用方式。我们学习一个框架习惯会先看exmaples就是如此了。
支持重构:在大规模修改代码或者重构的过程中,有了单元测试,可以确保修改后的代码仍然正确,大大降低了修改代码的风险。
自动化:单元测试是一种自动化测试,可以在每次代码提交时自动运行,提供即时的反馈。
单元测试的正确写法
User模型
Junit单元测试:
users.csv文件:
单元测试的关键要素
自定义输入数据
每一个单元测试都应该有明确定义的输入。这些输入应该覆盖所有可能的情况,包括正常情况、边界情况、异常情况等。测试的输入数据应该尽可能地丰富和多样,以确保代码在各种情况下都能正确运行。
多场景的测试覆盖
单元测试应该尽可能多地覆盖各种可能的场景。这包括函数或者方法的所有可能的执行路径,以及所有可能的输入数据。多场景的测试覆盖可以大大增加测试的有效性。
断言预测结果
每个单元测试都应该有一个或多个断言来验证代码的执行结果。断言应该对结果的正确性进行严格的检查,以确保代码的行为符合预期。
独立性
每一个单元测试都应该是独立的,不依赖于其他的测试,也不依赖于测试的执行顺序。这样可以保证每个测试都是可重复的,也可以单独运行。