美文网首页
JUnit学习小结

JUnit学习小结

作者: Arvesynden | 来源:发表于2019-09-30 16:16 被阅读0次

JUnit 是一个 Java 编程语言的单元测试框架。

xUnit是一套基于测试驱动开发的测试框架,包括PythonUnit、CppUnit、JUnit等。

JUnit4的作用:减少后期测试的时间;提升代码质量。

JUnit使用断言机制将测试的结果与预期的结果进行比对,确保对结果的可预知性。

断言assert

assert有两种用法:  

1、assert <boolean表达式>

如果<boolean表达式>为true,则程序继续执行。 如果为false,则程序抛出AssertionError,并终止执行。  

2、assert <boolean表达式> :

<错误信息表达式> 如果<boolean表达式>为true,则程序继续执行。 如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

assertEquals(boolean expected, boolean actual)

assertTrue(boolean condition)

assertEquals 和 assertTrue 区别 相同之处:

都能判断两个值是否相等

assertTrue 如果为true,则运行success,反之Failure

assertEquals 如果预期值与真实值相等,则运行success,反之Failure

不同之处:

assertEquals 运行Failure会有错误提示,提示预期值是xxx,而实际值是xxx。容易调式

assertTrue 没有错误提示

JUnit教程

JUnit使用过程

由于eclipse中已经包含了JUnit的jar包,故不用再单独下载。

1.导入jar(右键Build Path --> Add Libraries --> Junit --> Junit4)

2.新建测试类:右键需测试类所在包new --> JUnit Test Case参照自动生成的测试类模板(可删除),写自己的测试方法

3.运行测试:测试文件右键 --> Run as JUnit Test

JUnit使用总结

1.测试方法上必须使用@Test

2.测试方法必须使用 public void进行修饰,不能带任何的参数

3.新建一个源代码目录来存放测试代码

4.测试类的包应该和被测试类保持一致

5.测试单元中的每个方法一定要能够独立测试,其方法不能有任何依赖

6.建议测试类使用Test作为类名的后缀,测试方法已test作为前缀

public class Calculate {

     public int add(int a,int b) {

          return a + b;

     }

     public int subtract(int a, int b) {

          return a - b;

     }

     public int multiply(int a,int b) {

          return a * b;

     }

     public int divide(int a ,int b) {

          return a / b;

     }

}

import static org.junit.Assert.*;

import org.junit.Test;

public class CalculateTest

     @Test

     public void testAdd() {

         assertEquals(6, new Calculate().add(3,3));

     }

     @Test

     public void testSubtract() {

          assertEquals(3, new Calculate().subtract(5,2));

     }

     @Test

     public void testMultiply() {

          assertEquals(4, new Calculate().multiply(2, 2));

     }

     @Test

     public void testDivide() {

          assertEquals(3, new Calculate().divide(6, 2));

     }

}


测试用例不是用来证明你是对的,而是用来证明你没有错。

测试用例用来达到想要的预期效果,但对于逻辑错误无能为力。

Failure一般由单元测试使用的断言方法判断失败引起,也就是说程序输出的结果和预期的不一样

error是由程序代码逻辑错误引起,也可以说是测试代码中的一个隐藏的bug.

JUnit运行流程

class JUnitTest {

     @BeforeAll

    static void setUpBeforeClass() throws Exception {

        System.out.println("this is beforeClass...");

    }

    @AfterAll

    static void tearDownAfterClass() throws Exception {

        System.out.println("this is afterClass...");

    }

    @BeforeEach

    void setUp() throws Exception {

        System.out.println("this is before...");

    }

    @AfterEach

        void tearDown() throws Exception {

        System.out.println("this is after...");

    }

    @Test

      public void test1() {

        System.out.println("this is test1...");

    }

    @Test

    public void test2(){

        System.out.println("this is test2...");

    }

}

运行结果为:

this is beforeClass...

this is before...

this is test1...

this is after...

this is before...

this is test2...

this is after...

this is afterClass...

在JUnit5中,其命名更加直观。

1. @BeforeAll修饰的方法会在所有方法被调用前执行,而且该方法是静态的,所以当测试类被加载后接着就会运行它,而且在内存中它只会存在一份实例,它比较适合加载配置文件等只执行一次的东西。(在JUnit4中对应@BeforeClass)

2. @AfterAll所修饰的方法通常用来对资源的清理,如关闭数据库的连接(在JUnit4中对应@AfterClass)

3. @BeforeEach和@AfterEach会在每个测试方法的前后各执行一次(在JUnit4中对应@Before,@After)


Junit常用注解

除了上述几个注外,JUnit4还提供了以下注解:

@Test(expected=xxx(异常类).class):会抛出该异常

@Test(timeout=毫秒 ):设置执行的时间,用于结束死循环或是性能测试

JUnit5中的@Test已经删除timeout和expected这两个参数。


JUnit测试套件

测试套件就是组织测试类一起运行的,批量运行测试类。(该方法只在JUnit4中有效,JUnit5对其作了修改)

1.写一个作为测试套件的入口类,这个类里不包含其他的方法!!!

2.更改测试运行器Suite.class.

3.将要测试的类作为数组传入到Suite.SuiteClasses({})

@RunWith(Suite.class)  //将测试类改为测试套件类

@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})

//测试类入口类

@RunWith(Suite.class)

@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})

public class SuiteTest {         }

public class TaskTest1 {

     @Test

     public void test() {

          System.out.println("this is TaskTest1...");

     }

}

public class TaskTest2 {

     @Test

     public void test() {

          System.out.println("this is TaskTest2...");

     }

}

public class TaskTest3 {

     @Test

     public void test() {

          System.out.println("this is TaskTest3...");

     }

}

运行结果

this is TaskTest1...

this is TaskTest2...

this is TaskTest3...


JUnit还可用来测试web项目,此处待未来学习后再进行补充。


JUnit 5和JUnit 4之间的其他差异(作者:2Tree 来自CSDN)
JUnit4和JUnit5比较

(此处仅为留存,防止链接内容失效,具体内容和链接中一致)

1、注解

2.1 建筑

JUnit 4将所有内容捆绑到单个jar文件中。

Junit 5由3个子项目组成,即JUnit Platform,JUnit Jupiter和JUnit Vintage。

JUnit平台

它定义了TestEngine用于开发在平台上运行的新测试框架的API。

JUnit Jupiter

它具有所有新的junit注释和TestEngine实现,以运行使用这些注释编写的测试。

JUnit Vintage

支持在JUnit 5平台上运行JUnit 3和JUnit 4编写的测试。

2.2 必需的JDK版本

Junit 4需要Java 5或更高版本。

Junit 5需要Java 8或更高版本。

2.3 断言

在Junit 4中,org.junit.Assert具有所有断言方法来验证预期结果和结果。

它们接受错误消息的额外参数作为方法签名中的FIRST参数。例如

publicstaticvoidassertEquals(longexpected, longactual)

publicstaticvoidassertEquals(String message, longexpected, longactual)

在JUnit 5中,org.junit.jupiter.Assertions包含大多数断言方法,包括附加assertThrows()和assertAll()方法。assertAll()到目前为止处于实验状态,并用于分组断言。

JUnit 5断言方法也有重载方法,以支持在测试失败时传递错误消息,例如

public static void assertEquals(longexpected, longactual)

public static void assertEquals(longexpected, longactual, String message)

public static void assertEquals(longexpected, longactual, Supplier messageSupplier)

2.4 假设

在Junit 4中,org.junit.Assume包含用于说明测试有意义的条件的假设的方法。它有以下五种方法:

assumeFalse()

assumeNoException()

assumeNotNull()

假使,假设()

assumeTrue()

在Junit 5中,org.junit.jupiter.api.Assumptions包含用于说明测试有意义的条件的假设的方法。它有以下三种方法:

assumeFalse()

假使,假设()

assumeTrue()

2.5 标记和过滤

在Junit 4中,使用了@category注释。

在Junit 5中,使用了@tag注释。

2.6 测试套房

在JUnit 4,@RunWith和@Suite注释。例如

importorg.junit.runner.RunWith;

importorg.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({ ExceptionTest.class, TimeoutTest.class})

public class JUnit4Example

{

}

在JUnit 5@RunWith,@SelectPackages和@SelectClasses如

import org.junit.platform.runner.JUnitPlatform;

import org.junit.platform.suite.api.SelectPackages;

import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)

@SelectPackages("com.howtodoinjava.junit5.examples")

public class JUnit5Example

{

}

2.7 第三方整合

在Junit 4中,没有对第三方插件和IDE的集成支持。他们必须依靠反射。

JUnit 5为此专门设立了子项目,即JUnit平台。它定义了TestEngine用于开发在平台上运行的测试框架的API

相关文章

  • junit学习小结

    junit 什么是junit这是一个Java测试框架,可以通过它来编写测试案例,对写好的代码进行测试 如何使用在j...

  • JUnit学习小结

    JUnit 是一个 Java 编程语言的单元测试框架。 xUnit是一套基于测试驱动开发的测试框架,包括Pytho...

  • 《Clean Code》- JUnit内幕

    一. JUnit框架 二. 小结

  • JUnit小结

    在appiumUI自动化中,使用到了junit,对junit做个小结。 1.junit包引入 eclipse内部集...

  • 自我提升计划

    * Spring文档学习 * junit的源代码学习

  • Junit学习

    本文是对唯鹿_Android单元测试(一):JUnit框架的使用的学习笔记 需要进行测试的工具类 1.用单个数据进...

  • JUnit学习

    What is Junit?Junit is a simple framework to write repeat...

  • JDBC

    最近学习了Java中的JDBC,做个总结~~ 1.Jdbc基础准备 junit(单元测试的工具) Junit单元测...

  • Android 测试快速入门

    在正式学习Android应用测试之前,我们先来了解以下几个概念。 JUnit JUnit是一个Java语言的单元测...

  • Android 测试快速入门必看,你要知道的都在这了!

    在正式学习Android应用测试之前,我们先来了解以下几个概念。 JUnit JUnit是一个Java语言的单元测...

网友评论

      本文标题:JUnit学习小结

      本文链接:https://www.haomeiwen.com/subject/tmiqpctx.html