相关概念
- 黑盒测试:一个黑盒测试不知道系统内部的状态与行为。测试仅仅依赖于系统外部接口来验证正确性。我们并不知道系统内部结构以及系统是如何运行的。我们需要知道的只是系统的功能输入,系统会产生预期的输出。
- 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。我们会使用实现具体知识来创建测试并驱动测试进程。我们不仅需要了解一个组件的实现,并且需要了解它是如何与其他组件交互的。
- 回归测试:软件或环境的修复或更正后的“再测试”,自动测试工具对这类测试尤其有用。
- 单元测试:是最小粒度的测试,以测试某个功能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细节。
- JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。
软件测试的4中类型
- 集成测试
- 功能测试
- 压力与负荷测试
- 验收测试
单元测试的3种类型
- 逻辑单元测试:这种单元测试主要针对一个单独的方法来检查代码,可以通过mock object或者stub来控制某个特定的测试方法的边界。
- 集成单元测试:这种单元测试主要用来测试真是环境中不同组件之间的相互作用。
- 功能单元测试:这种单元测试已经超出集成单元测试的边界,目的是为了确认一个刺激响应。
JUnit的历史
JUnit是一个Java语言的单元测试框架。
它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的
sUnit的xUnit家族中最为成功的一个。
JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经
集成了JUnit作为单元测试的工具。
单元测试的定义
单元测试检查一个独立的工作单元的行为。
在Java应用程序中,独立工作单元经常是一个独立方法。
相比之下,集成测试和验收测试检查的是各种组件如何交互。
一个工作单元就是一项任务,不直接依赖于其他任何任务的完成。
单元测试框架应该遵守的三大规则
- 每个单元测试必须独立于其他所有单元测试而运行;
- 框架应该以单个测试为单位来检测和报告错误;
- 应该易于定义要运行哪些单元测试
Junit4的常用注解
- @RunWith:指定测试类使用某个运行器(TestRunner)
- @Before:初始化方法 对于每一个测试方法都要执行一次
- @After:释放资源 对于每一个测试方法都要执行一次
- @Test:测试方法,在这里可以测试期望异常和超时时间
- @Ignore :忽略的测试方法
- @BeforeClass :针对所有测试,只执行一次,且必须为static void
- @AfterClass :针对所有测试,只执行一次,且必须为static void
- @Parameters : 指定测试类的测试数据集合
- @Rule : 允许灵活添加或重新定义测试类中的每个测试方法的行为
- @FixMethodOrder : 指定测试方法的执行顺序
- @SuiteClasses : 设置Suite包含的测试类集合
ps:一些注解的执行顺序
- 单元测试用例执行顺序为 : @BeforeClass -> @Before -> @Test -> @After -> @AfterClass
- 单个测试方法的调用顺序为: @Before -> @Test -> @After
Junit中常用的断言
assertEquals(a,b)
测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
assertTrue(a)
测试a是否为true(真),a是一个Boolean数值。
assertFalse(a)
测试a是否为false(假),a是一个Boolean数值。
assertNotNull(a)
测试a是否非空,a是一个对象或者null。
assertNull(a)
测试a是否为null,a是一个对象或者null。
assertNotSame(a,b)
测试a和b是否没有都引用同一个对象。
assertSame(a,b)
测试a和b是否都引用同一个对象。
实例 参数化测试
测试向量的加法
- 向量类
- 计算器类
- 测试类
- 创建环境
- 有参的构造方法
- @Parameters为测试方法传递参数
- 测试方法