JUnit

 

在测试Java程序时,要把代码放在main()中才能执行,每次测试都需要改动很多代码,从头开始测试,很不方便。

Unit是一个测试框架,专门用于测试。

Unit是一个系列,J表示Java,JUnit是测试Java的。

 

 

常用的测试方式有2种:黑盒测试、白盒测试。

顾名思义,黑盒盒子是黑的,略去了盒子中的内容,不关心盒子中是什么(程序是怎么执行的),只关心程序的输入、输出,提供数据,只看结果是否符合预期。

白盒盒子是白的,可以看到盒子中的内容(程序执行过程)。黑盒不仅关心程序的输入、输出,还关心程序的具体执行过程。

JUnit是白盒测试的一种。

 

 

一般不直接在原代码上直接测试,而是在项目下新建一个test包用于测试,包名也可以用要测试的包的包名+Test来命名。

包下新建测试类,类名用要测试的类的类名+Test来命名。

测试方法的方法名一般是在原方法名+Test。

比如要测试dao.StudentDao类的queryName()方法,对应的是测试类test.StudentDaoTest,或daoTest.StudentDaoTest,在这个类下写一个测试方法queryNameTest()。

命名只是习惯,不是强制要求。

 

 

测试方法的返回值必须是void,且必须是空参的。

这2个是强制要求。

 

 

可以把要测试的方法的方法体中的代码复制过来,改一下;也可以直接调用要测试的方法。

在测试方法上加注解@Test。

在Run|Debug  Configurations里进行相关配置。

 

 

要测试的代码:

package dao;

public class StudentDao {
    public String queryName(int id){
        //数据库相关操作
        //......
        return "张三";
    }
}

 

 

测试类:

package test;

import dao.StudentDao;
import org.junit.Test;

public class StudentDaoTest {
    @Test
    public void queryNameTest(){
        StudentDao studentDao = new StudentDao();
        String result=studentDao.queryName(1);
        System.out.println(result);
    }
}

可以点行号右边图标run|debug测试方法,或者run|debug整个测试类中的测试方法。

绿色表示通过测试,红色表示代码有问题。

 

 

有时候是绿色的,但运行结果并不符合预期,比如说思路错了。

我们可以使用断言来判断运行结果是否符合预期。

package test;

import dao.StudentDao;
import org.junit.Assert;
import org.junit.Test;

public class StudentDaoTest {
    @Test
    public void queryNameTest(){
        StudentDao studentDao = new StudentDao();
        String result=studentDao.queryName(1);
        Assert.assertEquals("张三",result);  //静态方法
    }
}

第一个参数是预期的值,第二个参数是实际运行的值。如果2个值相等,就绿色通过,否则红色不通过。

 

 

@Before会在每个@Test执行之前执行,常用于初始化。

@After会在每个@Test之后执行,常用于回收资源。

比如要执行2个@Test测试方法,在每个@Test执行之前都会调用@Before,在每个@Test执行之后都会调用@After。

 

package test;

import dao.StudentDao;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class StudentDaoTest {
    @Before
    public void init(){

    }

    @Test
    public void queryNameTest(){
        StudentDao studentDao = new StudentDao();
        String result=studentDao.queryName(1);
        Assert.assertEquals("张三",result);
    }

    @After
    public void destroy(){

    }
}

 

posted @ 2019-09-02 21:14 chenhongyong 阅读(...) 评论(...) 编辑 收藏