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

发表于:2021-7-19 10:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:大盛    来源:Java实验室

  junit是一个优秀的开源的java单元测试框架,也是目前比较流行且使用频率比较高的一款,今天我们就来讲讲junit怎么用。
  junit主要用于白盒测试、回归测试、单元测试
  首先我们来新建工程,还是跟原来一样建立。建立之后看看pom.xml文件,已经默认的加入了junit的依赖
  <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
  </dependency> 
  看看我们建立的工程,idea都给我们生成了什么样的目录结构。
  我们的junit单元测试文件就放在test/java下面,我们先看一个基础用法,在Lesson9ApplicationTest里面增加一个方法:
  @SpringBootTest 
  @RunWith(SpringRunner.class)//使用SpringRunner加载上下文: 
  public class Lesson9ApplicationTests { 
      @Test//这个是一个test单元测试文件 
      public void test1() { 
          int num = new Integer(1); 
          Assert.assertEquals(num,1); 
      } 
  } 
  在这个方法的左边会有响应的图标,第一个叶子样的图标标注这个是一个springboot的测试文件,在启动的时候能看到我们正常启动Application的banner图标,说明加载了springboot的上下文。
  我们直接在第二个圆形√加三角形的图标点击,就能运行了。
  junit连常用的注解
  @RunWith:标识为JUnit的运行环境;
  @SpringBootTest:获取启动类、加载配置,确定装载Spring Boot;
  @Test:声明需要测试的方法;
  @BeforeClass:针对所有测试,只执行一次,且必须为static void;
  @AfterClass:针对所有测试,只执行一次,且必须为static void;
  @Before:每个测试方法前都会执行的方法;
  @After:每个测试方法前都会执行的方法;
  @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 判定两个变量是否指向同一个内存地址
  @Test 
  public void test2() { 
      List<String> list1 = Arrays.asList("a", "b"); 
      List<String> list2 = Arrays.asList("a", "b"); 
      List<String> list3 = list2; 
   
      Assert.assertEquals(list1,list2);//通过 
      Assert.assertEquals(list3,list2);//通过 
      Assert.assertSame(list3,list2);//通过 
      Assert.assertSame(list1,list2);//不通过,因为list1和list2分别指向不同的内存地址 
  } 
  web模拟
  我们在@SpringBootTest注解上面加上使用随机端口启动
  @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
  @Autowired 
  private TestRestTemplate testRestTemplate; 
   
  @Test 
  public void test3() throws URISyntaxException { 
      String result = testRestTemplate.getForObject("/demo/test1", String.class); 
      Assert.assertEquals(result,"hello junit test"); 
  } 
  TestRestTemplate 是不是很熟悉,是的Springboot还为RestTemplate建立了专门的测试类。
  注意:一定要使用随机端口启动,否则执行失败。但是笔者感觉这个专门写个测试类很麻烦,还不如直接使用postman测试,你们觉得呢?
  数据库测试
  @Test 
  @Transactional 
  public void test4() { 
      User user = new User(); 
      user.setName("abc"); 
      user.setAge(19); 
      user.setBirthday(new Date()); 
      userJpa.save(user); 
      Assert.assertTrue(user.getId()!=null); 
      Assert.assertNotNull(user.getId()); 
  } 
  注意:如果不想污染数据库,可以加上@Transactional,执行成功之后数据库事务会回滚,不会将数据真正插入到数据库中。
  idea为我们快速的创建test单元测试文件提供了快捷方式。
  选中需要进行单元测试的方法,右键-->go to-->Test就会为我们创建单元测试文件。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号