单元测试第三弹——使用JUnit进行单元测试
上一弹中介绍了单元测试以及单元测试框架(《单元测试第二弹——单元测试与单元测试框架》),单元第弹这一弹主要来介绍一下JUnit这个目前比较流行的测试单测框架。
JUnit是使用试由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是行单程序员测试,即所谓白盒测试,元测因为程序员知道被测试的单元第弹软件如何(How)完成功能和完成什么样(What)的功能。Junit是测试一套框架,继承TestCase类,使用试就可以用Junit进行自动测试了。行单
现在很多IDE中都已经集成了JUnit,元测当我们在创建maven项目的单元第弹时候,一般在pom文件中也会自动增加junit的测试依赖。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> <version>4.4</version> </dependency>注意上面的使用试maven的依赖中的scope,因为junit只在测试代码中会被用到,行单这里scope指定未test即可。元测我们直接使用和介绍JUnit4。
上手JUnit
要测试,要先有被测代码(当然,基于测试编程可以先有测试代码)。先来看我们想要测试的代码:
public class CaculateService { public float divide(float divisor, float dividend) { return divisor / dividend; } }我们想要测试这个类,那么如何使用Junit进行测试呢?先来写一个测试类。免费信息发布网如果你使用的是IntelliJ+Mac,那么可以在类名上使用快捷键option+enter直接生成测试类,这样IDE会帮忙生成一个对应的测试类。(其他操作系统和IDE也有同样的功能)

生成后的测试代码和被测代码所处路径如下:

可以看到,一般的maven项目中,会在src/main下面有两个目录,java和test,java目录中放的是源码,test目录中放的是测试代码。测试代码和测试代码的包名保持一致即可。
测试代码如下:
public class CaculateServiceTest { CaculateService caculateService = new CaculateService(); @Test public void testDivide() throws Exception { Assert.assertEquals(caculateService.divide(2, 1), 2.0); } }然后执行该方法就可以了,先不管Assert.assertEquals的用法及结果,这里总结下使用JUnit写测试代码的简单步骤:
创建一个名为 CaculateServiceTest.java 的测试类。 向测试类中添加名为 testDivide() 的方法。 向方法中添加 Annotaion @Test。 执行测试条件并且应用 Junit 的 assertEquals API 来检查。JUnit中的香港云服务器Assert
public class Assert extends java.lang.Object
这个类提供了一系列的编写测试的有用的声明方法。只有失败的声明方法才会被记录。
(1)void assertEquals(boolean expected, boolean actual)
检查两个变量或者等式是否平衡
(2)void assertFalse(boolean condition)
检查条件是假的
(3)void assertNotNull(Object object)
检查对象不是空的
(4)void assertNull(Object object)
检查对象是空的
(5)void assertTrue(boolean condition)
检查条件为真
(6)void fail()
在没有报告的情况下使测试不通过
这些方法我就不一一介绍了,相信我的读者们都能看懂并在平时开发中用的到,还是比较容易理解的。
Assert可以用来判断方法的真是结果和预期结果是否一样。是我们在写单元测试中用到最多的一个api。
JUnit中的注解
@BeforeClass:针对所有测试,只执行一次,且必须为static void @Before:初始化方法 @Test:测试方法,在这里可以测试期望异常和超时时间 @After:释放资源 @AfterClass:针对所有测试,亿华云只执行一次,且必须为static void @Ignore:忽略的测试方法一个单元测试类执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一个测试方法的调用顺序为:
@Before –> @Test –> @After
时间测试
如果一个测试用例比起指定的毫秒数花费了更多的时间,那么 Junit 将自动将它标记为失败。timeout 参数和 @Test 注释一起使用。现在让我们看看活动中的 @test(timeout)。
@Test(timeout = 1000) public void testTimeoutSuccess() { // do nothing }异常测试
你可以测试代码是否它抛出了想要得到的异常。expected 参数和 @Test 注释一起使用。现在让我们看看活动中的 @Test(expected)。
@Test(expected = NullPointerException.class) public void testException() { throw new NullPointerException(); }所有测试代码
代码地址
package com.hollischuang.effective.unitest.service; import org.junit.*; /** * @author Hollis 17/1/7. */ public class JUnitTest { /** * 只执行一次,在整个类执行之前执行 */ @BeforeClass public static void beforeClass() { System.out.println("in before class"); } /** * 只执行一次,在整个类执行之后执行 */ @AfterClass public static void afterClass() { System.out.println("in after class"); } /** * 每个测试方法被执行前都被执行一次 */ @Before public void before() { System.out.println("in before"); } /** * 每个测试方法被执行后都被执行一次 */ @After public void after() { System.out.println("in after"); } // test case 1 @Test public void testCase1() { System.out.println("in test case 1"); } // test case 2 @Test public void testCase2() { System.out.println("in test case 2"); } /** * 测试assertEquals */ @Test public void testEquals() { Assert.assertEquals(1 + 2, 3); } /** * 测试assertTrue */ @Test public void testTrue() { Assert.assertTrue(1 + 2 == 3); } /** * 测试assertFalse */ @Test public void testFals() { Assert.assertFalse(1 + 2 == 4); } /** * 测试assertNotNull */ @Test public void assertNotNull() { Assert.assertNotNull("not null"); } /** * 测试assertNull */ @Test public void assertNull() { Assert.assertNull(null); } /** * 测试fail和Ignore */ @Test @Ignore public void assertFail() { Assert.fail(); } /** * 测试异常 */ @Test(expected = NullPointerException.class) public void testException() { throw new NullPointerException(); } /** * 测试时间 */ @Test(timeout = 1000) public void testTimeoutSuccess() { // do nothing } /** * 测试时间 */ @Test(timeout = 1000) public void testTimeoutFailed() { while (true) { } } }总结
本文主要介绍了JUnit的常见用法,后面会专门写一篇文章介绍如何将JUnit和Spring集合到一起。
【本文是专栏作者Hollis的原创文章,转载联系作者本人获取授权】
戳这里,看该作者更多好文
相关文章
电脑玩原神遇到的问题及解决方法(探索神奇世界,解决游戏中常见错误)
摘要:原神是一款备受欢迎的开放世界角色扮演游戏,然而,许多玩家在使用电脑玩原神时常常遇到各种问题和错误,这不仅影响了游戏体验,还导致了许多不必要的困扰。本文将针对电脑玩原神常见的错误进行...2025-11-04
本文转载自微信公众号「今日Java」,作者麦洛。转载本文请联系今日Java公众号。前言 第一次 按类型筛选瓜类 第二次 按重量筛选瓜类 第三次 按类型和重量筛2025-11-04
之前有很多朋友问关于 Nginx 的 upstream 模块中 max_fails 及 fail_timeout,这两个指令,分别是配置关于负载均衡过程中,对于上游(后端)服务器的失败尝试次数和不可用2025-11-04
本文转载自微信公众号「JavaKeeper」,作者海星 。转载本文请联系JavaKeeper公众号。先贴个阿里的《 Java 开发手册》中的一个规范我们先不探讨其他方式,主要讲策略模式。定义策略模式(2025-11-04解决电脑错误oxc000007b的方法与技巧(探索常见电脑错误oxc000007b的原因及解决方案)
摘要:当我们使用电脑时,偶尔会遇到一些错误提示,而其中之一便是常见的电脑错误oxc000007b。这个错误代码可能会导致我们无法打开某些应用程序或者游戏,给我们的使用带来不便。本文将介绍...2025-11-04
图片来自 Pexels原文如下:下面,结合我自己使用 Lombok 之后的感受,谈谈 Lombok 带来的几大痛点。01JDK 版本问题当我想要将现有项目的 JDK 从 Java 8 升级到 Java2025-11-04

最新评论