当前位置: 首页 > article >正文

JUnit断言方法详解与实战

在Java开发中,JUnit是一个不可或缺的单元测试框架,而org.junit.Assert类中的断言方法则是JUnit的核心功能之一。通过这些方法,我们可以方便地验证代码的正确性。本文将详细介绍一些常用的断言方法,并通过实例展示它们的使用。
一、断言条件为真或假
Assert.assertTrue和Assert.assertFalse用于验证条件是否为真或假。这两个方法接受一个布尔表达式,如果表达式的结果与期望不符,则测试失败。
java复制
public class AssertionExample {
@Test
public void test1() {
String str = “test string”;
Assert.assertTrue(“str cannot be empty”, str != null && str.length() != 0);
Assert.assertFalse(“str cannot be empty”, str == null || str.length() == 0);
}
}
运行上述代码时,测试通过,因为字符串str既不为null,长度也不为0。
如果我们将str设置为null,则Assert.assertTrue会失败,输出如下:
java.lang.AssertionError: str cannot be empty
二、断言对象相等
Assert.assertEquals用于验证两个对象是否相等。它会调用Object#equals方法进行比较。
java复制
public class AssertionExample {
@Test
public void test3() {
Number a = new Integer(5);
Assert.assertEquals(“The number is not 5”, a, 5);
}
}
如果两个对象相等,测试通过;否则,测试失败。
此外,assertEquals还有针对基本类型和浮点数的重载版本,例如:
java复制
public class AssertionExample {
@Test
public void test4() {
double d = 2.6;
Assert.assertEquals(“The numbers are not approximately equal”, d, 3, 0.5);
}
}
这里允许一个误差范围(delta),只要两个浮点数的差值在这个范围内,就认为它们相等。
三、断言数组相等
Assert.assertArrayEquals用于比较两个数组是否相等。它会逐个比较数组中的元素。
java复制
public class AssertionExample {
@Test
public void test5() {
int[] integers = {3, 5, 7};
Assert.assertArrayEquals(“The numbers are not equal”, integers, new int[]{3, 5, 7});
}
}
如果两个数组的元素完全相同,测试通过。
四、断言对象引用相同
Assert.assertSame和Assert.assertNotSame用于比较对象的引用是否相同,而不是通过equals方法。
java复制
public class AssertionExample {
@Test
public void test7() {
String str1 = new String(“test string”);
String str2 = new String(“test string”);
Assert.assertSame(“Same objects reference failed”, str1, str1);
Assert.assertNotSame(“Different objects not same failed”, str2, str1);
}
}
如果str1和str2的引用不同,测试通过;否则,Assert.assertNotSame会失败。
五、使用Hamcrest匹配器
Assert.assertThat结合Hamcrest匹配器,可以实现更灵活的断言。
java复制
public class AssertionExample {
@Test
public void test9() {
int i = 22;
Assert.assertThat(i, createMultipleOfTwoMatcher());
}

private BaseMatcher<Integer> createMultipleOfTwoMatcher() {
    return new BaseMatcher<Integer>() {
        @Override
        public void describeTo(Description description) {
            description.appendText("Not a multiple of 2.");
        }

        @Override
        public boolean matches(Object item) {
            Integer integer = (Integer) item;
            return integer != null && integer % 2 == 0;
        }
    };
}

}
如果i是2的倍数,测试通过;否则,测试失败。
六、其他断言方法
Assert.assertNull和Assert.assertNotNull用于验证对象是否为null。
Assert.fail可以手动让测试失败,通常用于验证某些条件是否满足。
通过这些断言方法,我们可以编写出更加健壮和可读的单元测试代码。希望本文的介绍和实例能帮助你在实际开发中更好地使用JUnit进行单元测试。


http://www.kler.cn/a/542263.html

相关文章:

  • docker.service job docker.service/start failed with result ‘dependency‘
  • (篇六)基于PyDracula搭建一个深度学习的软件之新版本ultralytics-8.3.28调试
  • VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现
  • 参考数据和主数据:构建数据管理的基石
  • 今日AI和商界事件(2025-02-10)
  • 数据仓库和商务智能:洞察数据,驱动决策
  • Svelte前端框架
  • 活动预告 |【Part1】 Azure 在线技术公开课:迁移和保护 Windows Server 和 SQL Server 工作负载
  • 机器视觉3D的测量痛点
  • java基础6(黑马)
  • 使用itextpdf动态生成PDF
  • OpenCV 相机标定流程指南
  • 前端技术学习——ES6核心基础
  • 01.Docker 概述
  • vue3-01-初识vue3相对于vue2的提升与比较,使用vue-cli创建项目,使用vite构建工具创建项目
  • C++ -- vector的模拟实现
  • hive spark读取hive hbase外表报错分析和解决
  • vue2 导出Excel文件
  • 自动化办公|xlwings快速入门
  • 物联网综合性应用之网关设计
  • Linux防火墙设置
  • 【PS 2022】Adobe Genuine Service Alert 弹出
  • 详细代码篇:python+mysql +h5实现基于的电影数据统计分析系统实战案例(二)
  • 100.14 AI量化面试题:模型蒸馏(Model Distillation)和模型微调(Fine-tuning)的异同点
  • 1.1 CXX-Qt入门指南
  • 网络工程师 (32)TRUNK