返回介绍

13.1 单元测试

发布于 2025-04-22 20:10:04 字数 1518 浏览 0 评论 0 收藏

单元测试的理想情况是为每个类创建一个测试类,并为类中的每个方法创建一个测试方法,像 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 的事实上的标准单元测试框架。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。