- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
13.1 单元测试
单元测试的理想情况是为每个类创建一个测试类,并为类中的每个方法创建一个测试方法,像 getter 和 setter 方法这样的简单方法除外,它们直接从字段返回值或赋值给字段。
在测试用语中,被测试的类称为被测系统(SUT)。
单元测试旨在快速且多次运行。单元测试仅验证代码本身,而不涉及它的依赖,其任何依赖应该被帮助对象替代,这将在本章后面解释。涉及依赖性的测试通常在集成测试中完成,而不是单元测试。
乍一看,写单元测试看起来像不必要的额外工作。毕竟,你可以使用 main 方法从类本身内测试一个类。但是,你应该考虑单元测试的好处。首先,在单独的测试类中编写测试代码不会混淆你的类;第二,单元测试可以用于回归测试,在一些逻辑发生变化时,以确保一切仍然工作;单元测试的另一个主要优点是,它可以在持续集成设置中自动化测试。持续集成是指一种开发方法,当程序员将他们的代码提交到到共享库时,每次代码提交将触发一次自动构建并运行所有单元测试。持续集成可以尽早地检测问题。
在单元测试中,类使用 new 运算符实例化。不依赖 Spring 框架的依赖注入容器来创建 bean。
让我们来看看清单 13.1 中的类。
清单 13.1 被测试类
package com.example.util;
public class MyUtility {
public int method1(int a, int b) { ... }
public long method2(long a) { ... }
}
为了对这个类进行单元测试,创建一个如清单 13.2 所示的类。注意每个方法应该至少有一个测试方法。
清单 13.2 测试类
package com.example.util;
public class MyUtilityTest {
public void testMethod1() {
MyUtility utility = new MyUtility();
int result = utility.method1(100, 200);
// assert that result equals the expected value
}
public void testMethod2() {
MyUtility utility = new MyUtility();
long result = utility.method2(100L);
// assert that result equals the expected value
}
}
单元测试有些约定俗成,首先是将测试类命名为与带有 Test 的 SUT 相同的名称。因此,MyUtility 的测试类应命名为 MyUtilityTest;其次,测试类的包路径应与 SUT 相同,以允许前者访问后者的受保护和默认成员。但是,测试类应位于不同于测试的类的源文件夹下。
测试方法没有返回值。在测试方法中,你实例化要测试的类,调用要测试的方法并验证结果。为了使测试类更容易编写,你应该使用测试框架,例如 JUnit 或 TestNG。本章介绍用 JUnit 编写测试类的例子,JUnit 是 Java 的事实上的标准单元测试框架。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论