JUnit4单元测试框架使用

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<Object[]> 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));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_30496695/article/details/73433809