这么好用的Java单元测试工具,你还在犹豫什么?

开发 开发工具
junit是一个优秀的开源的java单元测试框架,也是目前比较流行且使用频率比较高的一款,今天我们就来讲讲junit怎么用。

[[410521]]

junit是一个优秀的开源的java单元测试框架,也是目前比较流行且使用频率比较高的一款,今天我们就来讲讲junit怎么用。

junit主要用于白盒测试、回归测试、单元测试。

首先我们来新建工程,还是跟原来一样建立。建立之后看看pom.xml文件,已经默认的加入了junit的依赖

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-test</artifactId> 
  4.     <scope>test</scope> 
  5. </dependency> 

 

看看我们建立的工程,idea都给我们生成了什么样的目录结构

我们的junit单元测试文件就放在test/java下面,我们先看一个基础用法,在Lesson9ApplicationTest里面增加一个方法:

  1. @SpringBootTest 
  2. @RunWith(SpringRunner.class)//使用SpringRunner加载上下文 
  3. public class Lesson9ApplicationTests { 
  4.     @Test//这个是一个test单元测试文件 
  5.     public void test1() { 
  6.         int num = new Integer(1); 
  7.         Assert.assertEquals(num,1); 
  8.     } 

在这个方法的左边会有响应的图标,第一个叶子样的图标标注这个是一个springboot的测试文件,在启动的时候能看到我们正常启动Application的banner图标,说明加载了springboot的上下文。

我们直接在第二个圆形√加三角形的图标点击,就能运行了。

junit连常用的注解

  1. @RunWith:标识为JUnit的运行环境;
  2. @SpringBootTest:获取启动类、加载配置,确定装载Spring Boot;
  3. @Test:声明需要测试的方法;
  4. @BeforeClass:针对所有测试,只执行一次,且必须为static void;
  5. @AfterClass:针对所有测试,只执行一次,且必须为static void;
  6. @Before:每个测试方法前都会执行的方法;
  7. @After:每个测试方法前都会执行的方法;
  8. @Ignore:忽略方法;

我们一般使用@Test的注解基本就差不多了,一般@BeforeClass会用于加载配置,而@AfterClass一般会用于释放资源。

上面的代码有一个陌生的Assert断言,这个东西是干嘛的呢,简单的可以理解为if条件。断言里面的值应该返回什么样的值。Assert.assertEquals(num,1)。

这个你可以理解为if(num==1)System.out.println("ok");但是这个方法有很多种重载的类

  • assertTrue/False 判定第一个条件是true还是false
  • assertEquals 接收两个参数,第一个是参数值,第二个是希望返回的值
  • assertNotEquals 这个跟上一个方法恰好相反,相当于if(param!=param2)
  • assertSame/NotSame 判定两个变量是否指向同一个内存地址
  1. @Test 
  2. public void test2() { 
  3.     List<String> list1 = Arrays.asList("a""b"); 
  4.     List<String> list2 = Arrays.asList("a""b"); 
  5.     List<String> list3 = list2; 
  6.  
  7.     Assert.assertEquals(list1,list2);//通过 
  8.     Assert.assertEquals(list3,list2);//通过 
  9.     Assert.assertSame(list3,list2);//通过 
  10.     Assert.assertSame(list1,list2);//不通过,因为list1和list2分别指向不同的内存地址 

web模拟

我们在@SpringBootTest注解上面加上使用随机端口启动

  1. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
  1. @Autowired 
  2. private TestRestTemplate testRestTemplate; 
  3.  
  4. @Test 
  5. public void test3() throws URISyntaxException { 
  6.     String result = testRestTemplate.getForObject("/demo/test1", String.class); 
  7.     Assert.assertEquals(result,"hello junit test"); 

TestRestTemplate 是不是很熟悉,是的Springboot还为RestTemplate建立了专门的测试类。

注意:一定要使用随机端口启动,否则执行失败。但是笔者感觉这个专门写个测试类很麻烦,还不如直接使用postman测试,你们觉得呢?

数据库测试

  1. @Test 
  2. @Transactional 
  3. public void test4() { 
  4.     User user = new User(); 
  5.     user.setName("abc"); 
  6.     user.setAge(19); 
  7.     user.setBirthday(new Date()); 
  8.     userJpa.save(user); 
  9.     Assert.assertTrue(user.getId()!=null); 
  10.     Assert.assertNotNull(user.getId()); 

注意:如果不想污染数据库,可以加上@Transactional,执行成功之后数据库事务会回滚,不会将数据真正插入到数据库中。

idea为我们快速的创建test单元测试文件提供了快捷方式

选中需要进行单元测试的方法,右键-->go to-->Test就会为我们创建单元测试文件。

文章已经同步更新到 Java实验室官方站点:

 

https://javawu.com/archives/2808

 

责任编辑:武晓燕 来源: Java实验室
相关推荐

2009-09-01 16:45:00

C#单元测试工具

2011-10-20 10:09:14

JavaScript

2017-01-14 23:42:49

单元测试框架软件测试

2021-08-04 10:51:04

数据库单元测试SQL

2012-11-01 11:32:23

IBMdw

2012-11-01 11:37:05

JavaScript单元测试测试工具

2010-06-29 14:49:12

Typemock IsVS2010

2022-02-21 07:54:28

单元测试编程开发

2017-03-30 07:56:30

测试前端代码

2020-01-09 09:00:00

安全测试工具网络安全安全工具

2017-09-26 08:51:25

2023-07-26 08:58:45

Golang单元测试

2011-05-16 16:52:09

单元测试彻底测试

2019-07-22 09:24:54

LinuxMySQL数据库

2017-01-14 23:26:17

单元测试JUnit测试

2017-01-16 12:12:29

单元测试JUnit

2023-12-24 10:00:35

Java单元测试

2024-12-02 18:16:56

2022-05-12 09:37:03

测试JUnit开发

2011-06-14 15:56:42

单元测试
点赞
收藏

51CTO技术栈公众号