为什么需要单元测试
- 单元测试有没有必要?为什么需要单元测试?…… 理由简直多到不要不要的。总而言之,单元测试肯定是需要的。
- 对于算法工程师需要有单元测试吗?答案是:需要
- 最近老大要求我去对我负责的某个算法模块给出详细的单元报告,所以就写了一下这个报告
单元测试模块unittest
- unittest中最核心的四个概念是:test case, test suite, test runner, test fixture。
- unittest的静态类图
一个TestCase的实例就是一个测试用例
多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite
TestLoader是用来加载TestCase到TestSuite中
TextTestRunner是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法
对一个测试用例环境的搭建和销毁,是一个fixture
写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。这里加个说明,在Runner执行时,默认将执行结果输出到控制台,我们可以设置其输出到文件,在文件中查看结果(你可能听说过HTMLTestRunner,是的,通过它可以将结果输出到HTML中,生成漂亮的报告,它跟TextTestRunner是一样的,从名字就能看出来,这个我们后面再说)
代码样例
1 |
|
1 | # test_mathfunc.py |
1 | # test_suite.py |
依赖关系
- 如下场景:支付是一个独立的接口,由其它开发提供,根据支付的接口返回状态去显示失败,还是成功,这个是你需要实现的功能
- 也就是说你写一个b功能,你的同事写一个a功能,你的b功能需要根据a功能的结果去判断,然后实现对应的功能。这就是存在依赖关系,你同事开发的进度你是无法控制的
你要是等他开发完了,你再开发,那你就坐等加班吧.- 以下是自己写的 zhifu_statues()函数功能,大概设计如下
1 | def zhifu(): |
单元测试用例设计
1 | from unittest import mock |