Java高级技术 单元测试(JUnit4)

这篇具有很好参考价值的文章主要介绍了Java高级技术 单元测试(JUnit4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


JUnit总览

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit

一、什么是单元测试?

所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。

我们之前一直使用的测试便是通过main方法来实现,但在main方法中写测试代码有如下的几个问题存在:

  • 只能在main方法编写测试代码,去调用其他方法进行测试。
  • 无法实现自动化测试,一个方法测试失败,可能影响其他方法的测试。
  • 无法得到测试的报告,需要程序员自己去观察测试是否成功。

为了测试更加方便,有一些第三方的公司或者组织提供了很好用的测试框架,其中一种便是JUnit测试框架。

JUnit是第三方公司开源出来的框架,用于对代码进行单元测试的工具(IDEA已经继承了JUnit框架)。

相比于在main方法中测试,JUnit有如下的优点:

  • 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。
  • 不需要人为分析测试的结果,会自动生成测试报告出来。

二、JUnit的使用与入门案例

因为Junit是第三方提供的,所以在使用之前,我们需要导入到项目之中才能使用,具体步骤如下所示:

  1. 将Junit框架的jar包导入到项目中(注意:IDEA集成了Junit框架,不需要手工导入)。
  2. 为需要测试的业务类,定义对应的测试类,并为每个业务方法,编写对应的测试方法(必须:公共、无参、无返回值)。
  3. 测试方法上必须声明@Test注解,然后在测试方法中,编写代码调用被测试的业务方法进行测试。
  4. 开始测试:选中测试方法,右键选择"Junit运行",如果测试通过,则为绿色;如果测试失败,则为红色

使用演示

先准备一个类:Utils工具类(实现两数最大值)

public class Utils {
    public static int max(int num1,int num2) {
        return num1 > num2? num1 : num2;
    }
}

再准备一个测试类,测试Utils工具类中的方法能否正常使用。

public class showTest {
    @Test
    public void show(){
        int num = 10;
        int num2 = 30;
        System.out.println("两数最大值为:" + Utils.max(num,num2));
    }
}

在写完代码后,测试方法左边会出现一个绿色的三角形按钮,点击按钮就可以测试方法。

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit


三、JUnit断言机制

断言机制(assertions):是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是org.junit.jupiter.api.Assertions的静态方法。

而所谓断言,意思是程序员可以预测程序的运行结果,检查程序的运行结果是否与预期一致。

  • 简单断言

介绍一种简单的断言方法。

现在在showTest中新增一个方法:assertEquals(判断两个对象或两个原始类型是否相等)。

public class showTest {
    @Test
    public void show(){
        int num = 10;
        int num2 = 30;
        assertEquals("不等于",10,Utils.max(num,num2));
        System.out.println("两数最大值为:" + Utils.max(num,num2));
    }
}

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit
注意:

若断言失败,后面的代码都不会执行,所以断言后的输出语句并没有执行。

  • 数组断言

通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

public class showTest {
    @Test
    public void show(){
        assertArrayEquals("内容不相等",new int[]{3,2},new int[]{2,2});
    }
}

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit


四、JUnit框架的常用注解

JUnit的启动必须要有@Test注解,它的作用是用来标记一个方法为测试方法,测试才能启动执行。

在JUnit中,除了@Test注解,还有一些其他的注解:

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit

@Before:每个测试方法执行之前执行

@Before
    public void before(){
        System.out.println("before执行了");
    }

    @Test
    public void test1(){
        System.out.println("test1执行");
    }

    @Test
    public void test2(){
        System.out.println("test2执行");
    }

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit


@After:每个测试方法之后执行。

     @Test
    public void test1(){
        System.out.println("test1执行");
    }

    @Test
    public void test2(){
        System.out.println("test2执行");
    }

    @After
    public void after(){
        System.out.println("after执行了");
    }   

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit


@BeforeClass :修饰静态方法,只会在所有测试方法之前执行一次。

@BeforeClass
    public static void before(){
        System.out.println("before执行了");
    }

    @Test
    public void test1(){
        System.out.println("test1执行");
    }

    @Test
    public void test2(){
        System.out.println("test2执行");
    }

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit


@AfterClass : 修饰静态方法,只会在所有测试方法之后执行一次。

    @Test
    public void test1(){
        System.out.println("test1执行");
    }

    @Test
    public void test2(){
        System.out.println("test2执行");
    }

    @After
    public void after(){
        System.out.println("after执行了");
    }

运行效果

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit


● 注解的应用场景

假如我想在每个测试方法中使用Socket对象,并且用完之后,要把Socket关闭,这个时候就可以使用注解来完成。

public class jUnitTest{
    private static Socket socket;
    @Before
    public void test1(){
        System.out.println("--> test1 Before 执行了");
    }
    @BeforeClass
    public static void test11(){
        System.out.println("--> test11 BeforeClass 执行了");
        //初始化Socket对象
        socket = new Socket();
    }
    @After
    public void test2(){
        System.out.println("--> test2 After 执行了");
    }
    @AfterCalss
    public static void test22(){
        System.out.println("--> test22 AfterCalss 执行了");
         //关闭Socket
        socket.close();
    }
}

● 注解小结

1.被@BeforeClass标记的方法,执行在所有方法之前
2.被@AfterCalss标记的方法,执行在所有方法之后
3.被@Before标记的方法,执行在每一个@Test方法之前
4.被@After标记的方法,执行在每一个@Test方法之后

五、JUnit5的注解

在JUnit5中对注释做了更新,但作用是相同的,只是改了方法名。

junit4单元测试,JavaSE进阶,单元测试,java,junit,junit4,JUnit文章来源地址https://www.toymoban.com/news/detail-769928.html

到了这里,关于Java高级技术 单元测试(JUnit4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA使用Junit4进行单元测试

            单元测试不仅能帮我们验证代码逻辑,还可以通过执行时间进行快速筛选不合格代码并进行优化。核心模块的代码的单元测试覆盖率要达到100%,其他模块代码的单元测试覆盖率需要达到60%。下面将介绍在IDEA上使用Junit4进行单元测试的方法: 一、安装JunitGenerator2插件

    2023年04月16日
    浏览(44)
  • Junit4 + Mockito进行单元测试实战案例

    ​ 实战代码案例: ​​​​​​​​​​​ 注意:idea2021.3.3之前的版本都搜索不到这个插件。 使用TestMe自动生成单元测试代码: 不是自动化执行的单元测试都是无意义的,项目中那么多单测,难道一个一个点吗? 引入maven-surefire-plugin插件用于自动化执行单测。 include里表

    2024年02月16日
    浏览(53)
  • 在Idea中使用Junit4进行单元测试

    #初学者,为了对知识进行巩固写这个文章,有问题欢迎指出,欢迎讨论 在Setting - Plugins - Marketplace中搜索JUnit,点击Apply后重启Idea 创建的类和文件夹 按照这个顺序就可以啦 点击OK后,在我们的Test文件夹中就出现了一个测试文件

    2024年02月03日
    浏览(54)
  • 基于Junit4+Mockito+PowerMock实现Controller+Service的单元测试

    一 导入的依赖 二 依赖版本 三 controller测试示例代码       controller         controllerTest         测试结果:覆盖率100%         带异常的Controller         带异常提示的ControllerTest         测试结果,覆盖率100%   三 service测试示例代码         service         serviceTest    

    2024年02月14日
    浏览(43)
  • Tests run: 0, Failures: 0, Errors: 0, Skipped: 0【Junit4 升级 Junit5】【Maven 检测不到单元测试问题】

    由于测试容器,有残留的 JUnit4 依赖项。能够通过显式将 JUnit5 设置为万无一失插件的依赖项来解决此问题,如下所示:

    2024年04月27日
    浏览(43)
  • Java高级技术(单元测试)

    一,概括     二,junit    三,案例 (1),实验类  (2),测试类   四,常见注解   五,案例 (1),测试类 (2),结果    六,常见注解注意:       junit5版本的注解名字与junit4不同

    2024年02月04日
    浏览(44)
  • Java高级技术:单元测试、反射、注解

    目录 单元测试 单元测试概述 单元测试快速入门 单元测试常用注解 反射 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 注解 注解概述 自定义注解 元注解

    2024年01月16日
    浏览(51)
  • Spring整合Junit4

    好处1:不需要自己创建IOC容器对象了 好处2:任何需要的bean都可以在测试类中直接享受自动装配 ①加入依赖 ②创建测试类

    2024年02月20日
    浏览(48)
  • springboot框架(2):整合junit4

    junit用于单元测试。 新建springboot项目(不依赖任何插件,所以不需要选择任何插件) 引入test依赖(新建项目自动引入了这个依赖,如果没有这个依赖,才需要添加) 高版本的springboot(例如:2.6.5)只有junit5没有引入junit4,所以需要导入依赖(如果出现import灰色时,请检查是不是需要导

    2023年04月26日
    浏览(39)
  • Junit4 一直处于运行中的排查过程

    新买了一个Macbook Pro . 之前的工程搬家过来, 这天要跑个单元测试。 发现Junit4 一直处于运行中。没有错误信息,没有用例执行结果。遂开始排查原因。 这里插一句,苹果芯片的Mbp还是很好用的,除了性能够用之外,最主要是安静+不热。 这对比我之前的i7版本的真是太明显了

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包