千家信息网

JAVA中单元测试的常用方式有哪些呢

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今天就跟大家聊聊有关JAVA中单元测试的常用方式有哪些呢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是单元测试单元测试(英语:Unit
千家信息网最后更新 2026年11月01日JAVA中单元测试的常用方式有哪些呢

今天就跟大家聊聊有关JAVA中单元测试的常用方式有哪些呢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

什么是单元测试

单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书要求的工作目标,没有程序错误;虽然单元测试不是什么必须的,但也不坏,这牵涉到项目管理的政策决定。

单元测试的优点

优质的单元测试可以保障开发质量和程序的鲁棒性。在大多数互联网企业中开发工程师在研发过程中都会频繁地执行测试用例,运行失败的单测能帮助我们快速排查和定位问题 使问题在被带到线上之前完成修复。正如软件工程界的一条金科玉律----越早发现的缺陷,其修复成本越低。一流的测试能发现未发生的故障;二流的测试能快速定位故障的发生点;三流的测试则疲于奔命,一直跟在故障后面进行功能回归。JAVA中常用的单元测试工具

JUnit/JUnit5

https://junit.org/junit5/

junit是老牌测试框架了,也是目前引用最广泛的一个框架。当前已经更新到Junit5,功能更强大。

class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest() { // not executed } @Test void abortedTest() { assumeTrue("abc".contains("Z")); fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { }}

assertj

https://assertj.github.io/doc/

一个功能强悍的断言工具,支持各种断言方式

// entry point for all assertThat methods and utility methods (e.g. entry)import static org.assertj.core.api.Assertions.*;// basic assertionsassertThat(frodo.getName()).isEqualTo("Frodo");assertThat(frodo).isNotEqualTo(sauron);// chaining string specific assertionsassertThat(frodo.getName()).startsWith("Fro") .endsWith("do") .isEqualToIgnoringCase("frodo");// collection specific assertions (there are plenty more)// in the examples below fellowshipOfTheRing is a ListassertThat(fellowshipOfTheRing).hasSize(9) .contains(frodo, sam) .doesNotContain(sauron);// as() is used to describe the test and will be shown before the error messageassertThat(frodo.getAge()).as("check %s's age", frodo.getName()).isEqualTo(33);// Java 8 exception assertion, standard style ...assertThatThrownBy(() -> { throw new Exception("boom!"); }).hasMessage("boom!");// ... or BDD styleThrowable thrown = catchThrowable(() -> { throw new Exception("boom!"); });assertThat(thrown).hasMessageContaining("boom");// using the 'extracting' feature to check fellowshipOfTheRing character's names (Java 7)assertThat(fellowshipOfTheRing).extracting("name") .contains("Boromir", "Gandalf", "Frodo", "Legolas")// same thing using a Java 8 method referenceassertThat(fellowshipOfTheRing).extracting(TolkienCharacter::getName) .doesNotContain("Sauron", "Elrond");// extracting multiple values at once grouped in tuples (Java 7)assertThat(fellowshipOfTheRing).extracting("name", "age", "race.name") .contains(tuple("Boromir", 37, "Man"), tuple("Sam", 38, "Hobbit"), tuple("Legolas", 1000, "Elf"));// filtering a collection before asserting in Java 7 ... assertThat(fellowshipOfTheRing).filteredOn("race", HOBBIT) .containsOnly(sam, frodo, pippin, merry);// ... or in Java 8assertThat(fellowshipOfTheRing).filteredOn(character -> character.getName().contains("o")) .containsOnly(aragorn, frodo, legolas, boromir);// combining filtering and extraction (yes we can)assertThat(fellowshipOfTheRing).filteredOn(character -> character.getName().contains("o")) .containsOnly(aragorn, frodo, legolas, boromir) .extracting(character -> character.getRace().getName()) .contains("Hobbit", "Elf", "Man");// and many more assertions: iterable, stream, array, map, dates (java 7 and 8), path, file, numbers, predicate, optional ...

Mockito

https://site.mockito.org/

一个单元测试中的Mock工具,可以很灵活的创建对象,配合单元测试。

// You can mock concrete classes and interfacesTrainSeats seats = mock(TrainSeats.class);// stubbing appears before the actual executionwhen(seats.book(Seat.near(WINDOW).in(FIRST_CLASS))).thenReturn(BOOKED);// the following prints "BOOKED"System.out.println(seats.book(Seat.near(WINDOW).in(FIRST_CLASS)));// the following prints "null" because // .book(Seat.near(AISLE).in(FIRST_CLASS))) was not stubbedSystem.out.println(seats.book(Seat.near(AISLE).in(FIRST_CLASS)));// the following verification passes because // .book(Seat.near(WINDOW).in(FIRST_CLASS)) has been invokedverify(seats).book(Seat.near(WINDOW).in(FIRST_CLASS));// the following verification fails because // .book(Seat.in(SECOND_CLASS)) has not been invokedverify(seats).book(Seat.in(SECOND_CLASS));

其他

对于业务代码,有时单元测试并不方便,因为每次启动成本过高。可以使用适当的单元测试方式,比如可以提供一个测试接口,利用IDE的热部署功能实现不重启及时修改代码。

但是对于非业务性代码,进行单元测试时非常有必要的,可以更早的发现代码中的问题,同时也可以检验程序的解耦性。

良好的代码设计在单元测试时会更方便,反之紧耦合的设计会给单元测试带来很大的困扰。

看完上述内容,你们对JAVA中单元测试的常用方式有哪些呢有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

测试 单元 程序 代码 方式 功能 过程 常用 最小 内容 工具 故障 软件 问题 设计 对象 就是 工程 成本 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京路客互联网科技有限公司 互联网与科技发展 互联网科技公司发展 善班互联网科技 广州宏创互联网科技 艾特科技互联网 互联网科技上市公司 赫美联合互联网科技 卫星互联网科技股票 创业天下互联网科技有限公司 北京华百购互联网科技有限公司 厦门比较好的科技互联网公司 青岛科技大学互联网大赛研究生 互联网公司黑科技创始人 佛山市拉法互联网科技有限公司 元气玛特互联网科技公司是外包吗 中国互联网有什么科技 珠海东科互联网科技有限公司 版纳互联网科技选哪家 西安左小互联网科技有限公司 互联网金融科技 为想互联网科技怎么样 互联网巨头科技公司 中国互联网科技发展 甘肃拓世互联网科技有限公司 承德科技产业互联网发展 湖北码尼互联网科技有限公司电话 广州富喜互联网络科技 广州有谷有贝互联网科技有限公司 10位科技互联网大佬
0