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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、unittest工作原理unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixtureTestCase:用户自定义的测试case的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。TestSuite:测试用例集合,可以通过addTest()方法手动增加Test Case,也可以通过TestLoader自动添加Test Case,TestLoader在添加用例时,会没有顺序。TestRunner:运行测试用例的驱动类,可以执行TestCase,也可以执行TestSuite,执行后TestCase和T...
            0 0 1852
            分享
          • GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过requestbody传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个“标准答案”:GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行ur...
            0 0 934
            分享
          • 在测试工作中,我们应该实事求是,接到需求后然后按如下几个方面来设计测试用例:1、分别设计不同类别的测试用例测试用例需要先区分类别,然后再进行设计。如冒烟测试用例,主要用来支持开发自测试,以及开发提测后,测试人员用来验证提测质量。冒烟测试用例主要覆盖需求核心业务流程,如果测试用例通过不过,会影响测试工作的正常开展。全功能测试用例,覆盖整个需求的测试用例,用来在测试过程中执行用例,来验证开发的代码是否符合产品的需求,发现可能存在的问题。不同类别的测试用例有不同的用途,需要分别来对待的。2、从用户角度出发,编写测试用例虽然我们了解到很多设计测试用例的方法,可是在实际工作中不能完全按照这些方法来实施的...
            0 0 828
            分享
          •   1. 引言  如果你是一个Python新手,那么你可能会在一些代码中看到assert关键字的语句。对于该语句,有人喜欢有人不喜欢,本文重点介绍Assert语句的作用以及什么时候应该使用该语句。  闲话少说,我们直接开始吧!  2. 基础语法  Assert语句的基础语法如下:  assert boolean_expression  这里,我们期望上述boolean_expression取值为True,而assert关键字的作用是帮助我们再次检查它是否真的为True。  此时如果我们断言是True,那么一切都好,没有什么错,我们可以像往常一样继续往下执行。  但是,如果我们断言为F...
            0 0 925
            分享
          •  一、前言工欲善其事,必先利其器最近对 API 接口协作的软件研究了好久,市面上的软件都下载用了一轮,下面给大家介绍其中的最强「神器」 Apifox。Apifox 官网:apifox.cn在介绍它之前,先说几个场景。如果你是后端、前端或测试,那一定遇到过这些场景。1.1. 场景一、后端视角:我是个 后端 ,遇到过的问题:1、接口定好,团队里的前端、测试小伙伴找我 要文档 。代码注释好给个 Swagger 还容易被吐槽界面丑、功能弱,不能做到 开发阶段即可并行联调 ,一开始是对接不了、调试不起来的,甚至有时候还会出现前端开发完界面,只能等后端联调。2、接口联调对接过程中,总会有些接口没...
            0 0 487
            分享
      • 51testing软件测试圈微信