Junit4的使用和执行流程

Junit的使用和执行流程

昨天晚上躺床上,在慕课网上看了一个关于讲解《Junit4》的视频教程。发现讲解的还不错,以前在写JAVA的过程中,自己也没有用到过Junit,而是通过类似的System.out.println….这样的语句来进行测试和排除bug。

确实这样挺不方便的,在华为的2016年精英挑战赛中,体会的就比较深刻。因为提交的版本代码是不允许有其它任何多余的输出的,因此,在我们提交代码版本时,总是要将每个JAVA源文件中的System.out.println这样的语句注释掉,相当麻烦。

刚好在此时此刻有缘看到了这个讲解《Junit4》的视频,于是就决定学习一下,为以后进行好的测试作准备。

创建Junit test

当我们创建一个被测试类时,

如果我们想为这个被测试类创建一个测试类时,应该如何做呢?

有如下的三步(上图已标出):

1、载入JUnit爆包,具体步骤:右键项目—–>Build Path —–>Add Libraries…——>JUnit.

2、创建一个名为test的source folder,并在此目录下创建一个包。注意此包名应与被测试类所在的包的包名相同。

3、为被测试类创建测试类,具体步骤如下:右键被测试类—->new —>Junit Test Case —–>出现一个界面(在界面中更改source folder ,填写Name)—->Next —–>选中要测试的函数 —–>Finish.

在第3步中,你也可以不这么创建,可以直接在test目录下面新建Junit Test Case ,但是这样有一个缺点就是:当被测试类的函数很多时,你必须一个一个函数的敲出来,而上面的方法我们只需要选中我们要测试的类中的函数即可。

例如,我们有如下的被测试类。

public class Calcalate {
    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;
    }
}

测试类如下:

public class CalcalateTest2 {

    @Test
    public void testAdd() {
        assertEquals(7, new Calcalate().add(3, 4));
    }

    @Test
    public void testSubtract() {
        assertEquals(2, new Calcalate().subtract(5, 3));
    }

    @Test
    public void testMultiply() {
        assertEquals(12, new Calcalate().multiply(3, 4));
    }

    @Test
    public void testDivide() {
        assertEquals(2,new Calcalate().divide(6, 3));
    }

}

在测试中,我们可能会遇到两种错误,如下:

1、failure,这种错误一般是由单元测试所使用的断言方法判断失败所引起的,这仅仅表示测试点发现了问题,也就是说输出与我们的预期是不符合的。

2、error,这种错误是由代码的异常所引起的,它可以产生与测试代码本身,也可以是被测试代码中的一个隐藏的bug。

总的来说:测试代码不是证明你是对的,而是证明你没有错。

Junit的执行流程

在我们新建Junit Test Case的时候,在出现如下的界面中,选中红色圈中的4个函数。

之后我们添加一些打印输出语句。来观察Junit的执行流程。

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class CalculateTest3 {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("this is beforeClass...");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("this is afterClass...");
    }

    @Before
    public void setUp() throws Exception {
        System.out.println("this is before...");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("this is after...");
    }

    @Test
    public void test1() {
        System.out.println("this is a test 1...");
    }
    @Test
    public void test2() {
        System.out.println("this is a test 2...");
    }
    }

    /*
     * 运行结果如下:
     * this is beforeClass...
       this is before...
       this is a test 1...
       this is after...
       this is before...
       this is a test 2...
       this is after...
       this is afterClass...
     * */

从结果可以得到Junit运行流程如下

  • 1、@BeforeClass修饰的方法会在所有方法被调用前被执行,而且由于此方法是静态的,因此当测试类被加载后接着就会运行它,且只会运行一次,内存中只会存在一份实例,比较适合于对配置文件的加载等。
  • 2、@AfterClass修饰的方法会在所有方法被调用后被执行,也只会执行一次,比较适合用于资源的清理操作。如:关闭数据库的连接。
  • 3、@Before和@After在每个@Test方法前后各执行一次。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值