51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3679|回复: 0
打印 上一主题 下一主题

[转贴] 使用JUnit5进行单元测试及JUnit5的新特性(上)

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-3-31 11:22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     一、单元测试
      单元测试就是模块测试,针对具体某块进行正确性的检验。在java这种,单元测试的最小单位是方法。单元测试属于白盒测试
      单元测试的优点:
      1、提高软件的质量——能提前发现小模块里的问题,保障开发质量和程序的鲁棒性(面对发生很大的故障,程序还不至于崩溃);
      2、减少重构时造成的影响——重构代码或者需求变动时,可能稍微改动了一点儿就引发一系列的bug,或者是改个小bug引发大bug。如果能做到单元测试,就可以让程序来检查是否有问题。
      使用单元测试要注意的几个点:
      1、要完全自动化,不要人为用System.out.println来打印日志看效果,要使用断言来验证;
      2、测试用例之间不能相互调用;
      3、测试用例能支持多次调用;
      4、单元测试的粒度最好小一些,以免发生错误不好定位;
      5、要符合BCDE(Border边界值弄特殊的值来测试,Correct正确的输入要得到正确的输出,Design和设计文档结合;Error测试的目的时发现程序有错误,要用非法操作、非法参数等);
      6、粗粒度的测试关注类覆盖率、方法覆盖率,只要有调用就算是覆盖到了;细粒度的测试关注行覆盖率;不能用覆盖率来考核,因为覆盖率高不代表单元测试设计得好。
      二、JUnit5
      Jupiter是JUnit5的核心(jupiter [?d?u?p?t??] 木星)
      引入jar包
      <dependency>
                  <groupId>org.junit.jupiter</groupId>
                  <artifactId>junit-jupiter</artifactId>
                  <version>5.7.0</version>
                  <scope>test</scope>
              </dependency>

      与以前版本的JUnit不同,JUnit 5由三个不同子项目中的几个不同模块组成。
      JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

      JUnit Platform是基于JVM的运行测试的基础框架在,它定义了开发运行在这个测试框架上的TestEngine API。此外该平台提供了一个控制台启动器,可以从命令行启动平台,可以为Gradle和 Maven构建插件,同时提供基于JUnit4的Runner。
      JUnit Jupiter是在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合.Jupiter子项目提供了一个TestEngine在平台上运行基于Jupiter的测试。
      JUnit Vintage提供了一个TestEngine在平台上运行基于JUnit 3和JUnit 4的测试。
      代码位置
      测试类都要些在src/test/java下,不能写在业务代码文件夹中,这是为了保证代码结构规范。注意引入的是junit.jupiter的包,而不是junit的包(4及以下版本),否则一些方法会报错。

      常用断言
      在低版本的JUnit中,断言在Assert类中,而JUnit5的断言在Assertions类中。类中有多种静态方法,比如Assertions.assertTrue(),Asserions.assertEquals(),Assertions.assertNull(),Assertions.assertNotNull()等,这些方法都有不同重载的方法,参数不同。
      public class TestNodeDemo {
          private String id = "1000";
          private String nodeTypeId = "6";
          Node node = new Node(this.id,this.nodeTypeId);
          @Test
          public void testAssertEquals(){
              nodeTypeId = "7";
              assertEquals("你错了",nodeTypeId,node.printNodeTypeId());
          }
          @Test
          public void testAssertTrue(){
              assertTrue(1==2);
          }
          @Test
          public void testAssetFalse(){
              assertFalse(1==2);
          }
          @Test
          public void testAssertSame(){
              String a = "hi";
              String b = "hi33";
              assertSame(a,b);
          }
          @Test
          public void testAssertNotNull(){
              Object object = null;
              assertNotNull(object);
          }

          @Test
          public void testAssertNotNull2(){
              Object object = null;
              assertNotNull("你给我的东西是空的",object);
          }
      }

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 00:37 , Processed in 0.066341 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表