• 0
  • 0
分享
  • 这么好用的Java单元测试工具,你还在犹豫什么——软件测试圈
  • 恬恬圈 2023-01-03 14:06:45 字数 2810 阅读 1277 收藏 0

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

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

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

  <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
  </dependency>

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

1-1.jpg

  我们的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的上下文。

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

1-2.jpg

1-3.jpg

  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单元测试文件提供了快捷方式。

1-4.jpg

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


作者:大盛    

来源:http://www.51testing.com/html/75/n-4478075.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、准备1.1 下载Postman 软件postman下载https://www.postman.com/1.2 首先把要进行压力测试的接口,进行测试,显示没有问题,状态为200二、压力测试步骤2.1 在接口处,设置参数,{{}}包住参数!外面还有双引号!2.2 选择Pre-request-Script,对变量进行编写代码postman.setEnvironmentVariable("openid",data["openid"]);2.3 一定不要忘了写断言,不然运行的时候总会提示一句话,额!具体我忘了截图,你遇到就知道了pm.test("St...
            0 0 2672
            分享
          • 1. 概述本文主要讲述了软件测试的生命周期、bug的描述方法及状态,以及bug之间的状态转换。具体描述如下,首先是软件测试的生命周期。2. 软件测试的生命周期软件测试的生命周期可以总的划分为以下几个阶段:需求分析:测试人员需要了解需求,对需求进行分解,得出测试需求。测试计划:根据要求编写测试计划书或方案测试设计:测试人员适当的了解设计,搭建测试用例框架测试执行:执行测试用例,找软件中存在的缺陷。测试评估:根据测试的结果,编写最终的测试报告以对软件的质量形成文字性说明与衡量。3. bug的描述bug的描述通常应该包含以下几个方面的内容,分别为:发现问题的版本:开发人员需要知道出现问题的版本,才能...
            0 0 1213
            分享
          •   性能测试中,CPU和内存是关注最多的两个性能指标。以我行应用最多的系统架构(WAS+Oracle)来说,CPU使用率高的问题多发生于数据库,比如索引不当引发的表扫描、绑定变量使用不当引发的硬解析、连接池使用不当引发的频繁建立断开连接,这些都会导致数据库服务器CPU使用率高。  内存问题则多发生于应用服务器。部署在WAS平台的Java应用,经常发生的问题是JVM堆内存溢出。产生该问题的原因有很多:  ·由环境引发的,虚拟机物理内存不足;  ·由参数配置引发的,JVM堆内存设置过小;  ·由应用程序引发的,内存泄露,错误使用大对象等等。  在实际性能测试过程中选择监控指标时,对JVM堆内存的监...
            14 14 1218
            分享
          • 我们使用一个电商项目进行演示,在调用登录接口完成登录之后,通过查看购物车接口获取该用户购物车中的信息。也就是说如果需要查看到购物车中的信息,则我们先要是登陆状态,这样的情况下,就需要有Cookie信息的存在了。提示:要获取购物车接口中的信息,需要使用登录后的Cookie保持登录状态。1、在HTTP信息头管理器组件中添加Cookie信息实现步骤:前提我们手动登陆电商网站,地址:http://www.testingedu.com.cn:8000/index.php/Home/user/login.html。然后通过工具获取到登陆后的Cookie数据。把Cookie数据存储到HTTP信息头管理器组件...
            9 9 4627
            分享
          •   EasyModeling 是我在2021年圣诞假期期间开发的一个 Java 注解处理器,采用 Apache-2.0 开源协议。它可以帮助 Java 单元测试的编写者快速构造用于测试的数据模型实例,简化 Java 项目在单元测试中准备测试数据的工作,在提高编写效率的同时,使单元测试更加整洁易读。经过一年的维护,EasyModeling 已经在几个 Thoughtworks 内部的项目上得到了应用,并迭代发布了几个版本。  单元测试中的数据准备的困难  在企业级应用软件开发项目中编写测试代码时,针对特定的测试场景,我们需要准备相应的测试数据,以验证被测组件在给定输入下的行为。在使用 Java ...
            0 0 544
            分享
      • 51testing软件测试圈微信