Unit
概念
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
程序单元是应用的最小可测试部件。
在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
意义
-
适应变更
-
简化集成
-
文档记录
-
表达设计
Junit
单元测试框架
- junit4
junit4 is a simple framework to write repeatable tests.
It is an instance of the xUnit architecture for unit testing frameworks.
- junit5
junit5 The new major version of the programmer-friendly testing framework for Java 8 and beyond.
- testNG
testNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use.
参数化测试
断言
断言
可用于自动校验测试结果。
Truth
Truth is Fluent assertions for Java.
测试覆盖率
意义
-
分析未覆盖部分的代码,从而反推在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?需求/设计不够清晰,测试设计的理解有误,工程方法应用后的造成的策略性放弃等等,之后进行补充测试用例设计。
-
检测出程序中的废代码,可以逆向反推在代码设计中思维混乱点,提醒设计/开发人员理清代码逻辑关系,提升代码质量。
-
代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,代码质量不会高到哪里去,可以作为测试自我审视的重要工具之一。
持续集成
持续集成指的是,频繁地(一天多次)将代码集成到主干。
它的好处主要有两个。
(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
Martin Fowler说过,”持续集成并不能消除Bug,而是让它们非常容易发现和改正。”
与持续集成相关的,还有两个概念,分别是持续交付和持续部署。
持续交付
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
持续部署
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤。
Mock
意义
去代替那些被测试代码所依赖的,但不可信赖东西。
框架
- mockito
mockito is tasty mocking framework for unit tests in Java.
- power-mockito
PowerMock provides a class called “PowerMockito” for creating mock/object/class and initiating verification, and expectations, everything else you can still use Mockito to setup and verify expectation.
- mock-server
mock-server can be used for mocking any system you integrate with via HTTP or HTTPS (i.e. services, web sites, etc).
When MockServer receives a requests it matches the request against active expectations that have been configured.
An expectations defines the action that is taken, for example, a response could be returned.
数据库
测试框架
- dbunit
DbUnit is a JUnit extension (also usable with Ant) targeted at database-driven projects that, among other things, puts your database into a known state between test runs.
内存数据库
- db2
性能
框架
jmeter application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance.
参考资料
- 单元测试
https://zh.wikipedia.org/wiki/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95
- assert
https://www.geeksforgeeks.org/assertions-in-java/
https://www.tutorialspoint.com/junit/junit_using_assertion.htm
https://www.zhihu.com/question/24461924
- code-coverage
https://tech.youzan.com/code-coverage/
- CI
http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html