单元测试应该遵循的原则
-
F-FAST(快速原则)
单元测试应该是可以快速运行的,在各种测试方法中,单元测试的运行速度是最快的,通常应该在几分钟内运行完毕 -
I-Independent(独立原则)
单元测试应该是可以独立运行的,单元测试用例互相无强依赖,无对外部资源的强依赖 -
R-Repeatable(可重复原则)
单元测试应该可以稳定重复的运行,并且每次运行的结果都是相同的 -
S-Self Validating(自我验证原则)
单元测试应该是用例自动进行验证的,不能依赖人工验证 -
T-Timely(及时原则)
单元测试必须及时的进行编写,更新和维护,以保证用例可以随着业务代码的变化动态的保障质量
MSF单元测规约
- 测试是多而小,而不是少而大的
- 每个测试只测试一个功能点
- 用测试的名称准确描述错误产生的原因
- 不依赖外部中间件如:数据库、第三方接口、MQ
- Assert 换 AssertJ增强工具
- 禁止使用System.out.println打印结果,对测试用例没有意义,在debug中观察值即可
- 多线程单元测试,要有结束线程标记,不要使用 wait/sleep 语句
最后
单元测试的目的是致力于减少已知BUG,确保主流程逻辑完整覆盖,非极端情况下代码运行健壮。同时单元测试也是枯燥无味的,工作量也庞大,在工作时间的取舍上优先对主流程进行单元测试代码覆盖。但对比于天天莫名其妙生产环境救火,测试同事埋怨开发代码垃圾,如果你在平时多做做单元测试,覆盖全面了主要功能逻辑,在转测试后减少测试的工作时长也提高自己的代码开发质量,在回过头来看看以前的自己和测试同事的各种撕,或其他人是否也在焦头烂额,也许你在会心一笑。
单元测试–>这是一个伟大而默默无闻的工作,如上都是个人想法,仅供思考。
附录Junit注解说明:
@Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)
@After:释放资源 对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次)
@Test:测试方法,在这里可以测试期望异常和超时时间
@Test:(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
@Ignore:忽略的测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;