Java学习笔记——单元测试(JUnit框架)
2021/10/10 17:15:33
本文主要是介绍Java学习笔记——单元测试(JUnit框架),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在进行单元测试之前需要安装JUnit框架,这里可以看一下我之前的博客
记录一下安装JUnit框架时遇到的问题以及解决办法
安装好之后,就可以来写单元测试的代码了
什么是单元测试呢?单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。
首先来写一个方法
这是项目的结构图
上面的mathDemo是编写的需要测试的类
下面的mathDemoTest是用来测试mathDemo的测试类
通常我们都在类名的后面加上Test 表示这是一个测试类
mathDemo类的代码,用来求一个长方形的面积
package UnitDemo; public class mathDemo { int area = 0; public int getArea(int a,int b){ area = a*b; return area; } }
mathDemoTest类的代码
package UnitDemo; import UnitDemo.mathDemo; import org.junit.*; import static org.junit.Assert.*; public class mathDemoTest { mathDemo m = new mathDemo(); @BeforeClass public static void setUpClass(){ System.out.println("在当前类的所有测试方法之前执行"); } @AfterClass public static void tearDownClass(){ System.out.println("在当前类中的所有测试方法之后执行"); } @Before public void setUp(){ this.m = new mathDemo(); System.out.println("在每个测试方法之前执行"); } @After public void tearDown(){ this.m = null; System.out.println("在每个测试方法之后执行"); } @Test public void testgetArea1(){ assertEquals("这是错误信息1",20,m.getArea(4,5)); } @Test public void testgetArea2(){ assertEquals("这是错误信息2",12,m.getArea(3,4)); } }
@Test注解的方法
- 每个@Test对应一个方法,这个方法会被识别为一个测试方法
- 一个测试类里面可以有多个@Test,但是每个@Test对应的测试方法只会被执行一次
通常我们会在@Test测试方法中使用assertEquals断言语句,来判断方法是否能够正常运行并且输出我们希望的结果
assertEquals(“错误信息”,期望结果,实际结果)
当期望结果与实际结果不一致时,就会打印错误信息
这是断言都正确,没有报错时的结果
但假如我修改一下期望结果,让期望结果与实际结果不一致
@Test public void testgetArea(){ assertEquals("这是错误信息1",20,m.getArea(4,5)); //正确 assertEquals("这是错误信息2",16,m.getArea(3,4)); //错误 }
这里会打印之前给定的错误信息,并且打印详细的信息,帮助我们来修改
这里需要说一下这些注解的含义:
@BeforeClass注解的方法,
- 是整个测试类开始执行的地方,在当前类所有的测试方法之前被执行。
- 是静态方法
- 用来初始化一些繁琐耗时的资源,比如创建数据库。
@AfterClass注解的方法,
- 是整个测试类完成之后执行的操作,在当前类中的所有测试方法之后执行。
- 是静态方法
- 用来清理@BeforeClass部分初始化的资源
注意,这两个都是Junit4的写法,在Junit5中,这两个分别叫@BeforeAll与@AfterAll
@Before注解的方法
- 在每个测试方法之前执行。
- 是非静态的方法
- 用来初始化类的对象或者类的属性
@After注解的方法
- 在每个测试方法之后执行
- 是非静态的方法
- 用来清理@Before部分初始化的对象或者属性
注意,这两个都是Junit4的写法,在Junit5中,这两个分别叫@BeforeEach与@AfterEach
@Before与@After会在每一个被@Test注解的测试方法的前后,被自动执行
@Before public void setUp(){ this.m = new mathDemo(); System.out.println("在每个测试方法之前执行"); } @Test public void testgetArea(){ assertEquals("这是错误信息1",20,m.getArea(4,5)); } @After public void tearDown(){ this.m = null; System.out.println("在每个测试方法之后执行"); }
具体的调用顺序就像这样,每次先调用@Before注解的方法,初始化类的对象,然后是运行测试方法,测试方法调用完毕之后调用@After注解的方法,清理释放之前初始化对象占用的空间。
也是因为这样,不同的@Test测试方法,彼此之间互不影响,因为每一个@Test测试方法的对象都是不一样的
但是对于@BeforeClass与@AfterClass中初始化的静态变量来说,由于只会初始化和清理一次,对所有的@Test测试方法都是有影响的
@Ignore注解的方法
被@Ignore注解的方法会被忽略,不会被执行
@Test public void testgetArea1(){ assertEquals("这是错误信息1",20,m.getArea(4,5)); } @Ignore public void testgetArea2(){ assertEquals("这是错误信息2",16,m.getArea(3,4)); }
结果为
虽然第二个测试方法里面的断言是错误的,但这里并没有报错,说明这个测试方法没有被执行。@Before和@After也只分别被调用一次。
这篇关于Java学习笔记——单元测试(JUnit框架)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南