关于测试

单元测试

  • 由开发人员写,给开发人员使用
  • 小段代码,目的是开发人员确定源代码做了希望它做的事
  • 一个UT case 只能针对一个类
  • 一个类的 UT 必须是完全独立的
  • UT 可以是自动的,也可以是手动的
  • UT 覆盖率问题

  • 测试时,当调用了其他类的代码时,应该使用 mock 将被测试类和其他类隔开

  • 测试时,如果调用了同一个类的其他方法时,是不需要使用 mock 的

单元测试的意义:

  1. 减少 bug :一个可单元测试的工程,会把业务、功能分割成规模更小、有独立的逻辑部件,称为单元。单元测试的目标就是保证各个单元的逻辑正确,最大限度减少 bug
  2. 提高代码质量:由于每个单元都有独立的逻辑,做单元测试时需要隔离外部依赖,确保这些依赖不影响检验逻辑。因为要把各种依赖分离,单元测试会促进工程进行组件拆分,整理工程依赖关系,更大程度减少代码耦合。这样的代码,更好维护,更好扩展,从而提高代码质量
  3. 快速定位 bug、减少调试时间
  4. 放心重构

TDD 测试驱动开发
TDD 原理是开发功能代码之前,先编写测试用例代码,然后针对测试用例编写功能代码,使其能够通过。

failure report:

  • Which component is under test?
  • What is the expected behavior?
  • What was the actual result?
  • What is the expected result?
  • How is the behavior reproduced?

tool:

article:

集成测试

  • 在指定的环境运行
  • 目的在于测试各个组件间是否能互相配合,正常工作
  • Integration tests can be performed at the unit level or the system level
  • 集成测试往往会涉及外部组件,如数据库、硬件、网络等等
  • 通常由专门的测试人员完成

tool:

article:

冒烟测试

  • Smoke Test 是从电子硬件测试来的,表示第一次对硬件原型 prototype 加电时,如果硬件冒烟了,就表示产品有问题。
  • 是比较初级的测试,仅仅是为了检查各个组件是否能一起工作,而并不去深究功能上是否正确。
  • 一般是大范围的集成测试,通常可以是整个系统/端到端的测试。

回归测试

  • A test that was written when a bug was fixed. It ensure that this specific bug will not occur again. The full name is “non-regression test.
  • A regression test re-runs previous tests against the changed software to ensure that the changes made in the current software do not affect the functionality of the existing software.
  • 回归测试是为了覆盖系统新发生的变化而进行的测试。
  • 回归测试可以由测试人员编写,也可以由开发人员编写。
  • 形式上可以就是一个覆盖新功能或者bug的UT,或者测试人员写的专用测试工具。

端到端测试

  • 端到端测试强调的是全面的,包含硬件环境等等的测试
  • 覆盖面广,一般都是人工测试

功能测试

Functional tests are related to integration tests, but refer more specifically to tests that test an entire system or application with all of the code running together, almost a super integration test.

Nightwatch.js

非功能测试

  • 主要指除程序主要功能以外的附属功能
  • 如GMI,log,report,failover等,为了监控程序运行,实现程序稳定性而附加的功能

acceptance tests

acceptance testing倾向测试的是尽量真实的用户体验。测试是否完成用户的实际需求,在完全和production相同或尽量类似的环境中。

白盒和黑盒测试

White box testing means that you know the input, you know the inner workings of the mechanism and can inspect it and you know the output.

With black box testing you only know what the input is and what the output should be.

使用cobertura注入后,就可以方便的得到任何一个集成测试对源代码的覆盖率。

目前流行的开源mock框架:

  • 较早的时候EasyMock是最流行的工具之一。
  • Mocktio,EasyMock之后流行的mock工具。特点是句法结构清晰,易理解。文档比较全,由于比较流行所以遇到问题容易找到解答。Mockito足以解决大部分UT的mock需求。总得来说是非常不错的mock工具。
  • PowerMock
  • Jmokit

Unit tests for fast developer feedback, integration tests to cover all the corner cases of component integrations, and functional tests to make sure everything works right for the end users.