频道栏目
首页 > 资讯 > Java > 正文

JUnit4单元测试框架使用

17-06-19        来源:[db:作者]  
收藏   我要投稿

JUnit4单元测试框架使用

前一段时间老师让真理下有关单元测试的知识,因为我对java相对比较熟悉所以选择了JUnit4,下面是结合一些视频教程和网上一些资料整理的一些相关内容。

一、开发环境

1、开发语言:java
2、单元测试框架:JUnit4
3、工具:eclipse

二、用法

1、介绍

JUnit4是一个Java语言的单元测试框架。Junit4测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。

2、功能

@Test:将一个普通的方法修饰成为一个测试方法
@Test(expected=XX.class) @Test(timeout=毫秒 ) @BeforeClass:它会在所有的方法运行前被执行,static修饰 @AfterClass:它会在所有的方法运行结束后被执行,static修饰 @Before:会在每一个测试方法被运行前执行一次 @After:会在每一个测试方法运行后被执行一次 @Ignore:所修饰的测试方法会被测试运行器忽略 @RunWith:可以更改测试运行器,可以完成多组值同时测试

3、使用方法

(1)建立Java Project并编写需要测试的功能类
(2)导入JUnit库,在项目右键->Build Path->Add Libraries->选择JUnit并点击next->选择JUnit4 并点击finish

这里写图片描述

这里写图片描述

这里写图片描述
(3)新建一个源代码目录来存放测试的代码
(4)编写测试方法并运行,测试代码上右键->Run As->JUnit Test
(5)根据结果分析代码中的问题

4、运行结果

Failure一般由单元测试使用的断言方法判断失败所引起的,这经表示测试点发现了问题,也就是说程序输出的结果和预期的不一样 error是有代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中的一个隐藏bug
这里写图片描述

5、注意事项

测试方法上必须使用@Test进行修饰 测试方法必须使用public void进行修饰,不能带任何的参数 测试类的包应该和被测试类保持一致 测试单元中的每个方法必须可以独立测试,测试方法不能有任何依赖

三、代码

1、功能类

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;
    }
}

2、测试类

public class CalculateTest {
@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 testAdd() {
        //第一个参数为预期值,第二个参数为函数的计算结果
        assertEquals(12, new Calculate().add(8, 4));
    }
    @Test
    public void testSubtract() {
        assertEquals(4, new Calculate().subtract(8, 4));
    }
    @Test
    public void testMultiply() {
        assertEquals(32, new Calculate().multiply(8, 4));
    }
    @Test
    public void testDivide() {
        assertEquals(2, new Calculate().divide(8, 4));
    }

}

3、测试套件入口类

@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})
public class SuiteTest {
//测试套件就是组织测试类一起运行的
}

4、更改测试运行器类

@RunWith(Parameterized.class)
public class ParameterTest {
    /*
     * 1.更改默认的测试运行器为RunWith(Parameterized.class)
     * 2.声明变量来存放预期值 和结果值
     * 3.声明一个返回值 为Collection的公共静态方法,并使用@Parameters进行修饰
     * 4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
     */
    int expected =0;
    int input1 = 0;
    int input2 = 0;

    @Parameters
    public static Collection t() {
        return Arrays.asList(new Object[][]{
                {3,1,2},
                {4,2,2}
        }) ;
    }

    public ParameterTest(int expected,int input1,int input2) {
        this.expected = expected;
        this.input1 = input1;
        this.input2 = input2;
    }

    @Test
    public void testAdd() {
        assertEquals(expected, new Calculate().add(input1, input2));
    }
}
相关TAG标签
上一篇:node.js学习笔记
下一篇:C++面向对象
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站