JUnit Java单元测试

单元测试(unit testing)

是指对软件中的最小可测试单元进行检查和验证。 对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类.

Demo类

public class Divide {
    public static int divide(int a, int b) {
        if (b == 0) {
            return 0;
        } else {
            return a / b;
        }
    }
}

JUnit3:”霸王式”

  • 必须继承TestCase
  • 测试方法体必须是test+测试方法名
import junit.framework.TestCase;
public class DivideTest3 extends TestCase {
    public void setUp() throws Exception {
        super.setUp();
    }

    public void tearDown() throws Exception {
    }

    public void testDivide() throws Exception {
        int a[] = {1, 2147483647, 1};
        int b[] = {1, 1, 0};
        for (int i = 0; i < a.length; i++) {
            int z = Divide.divide(a[i], b[i]);
            System.out.println(z);
        }
    }

}

JUnit4:注解式

注解

注解 行为
@BeforeClass 全局只会执行一次,而且是第一个运行
@Before 在测试方法运行之前运行
@Test 测试方法
@After 在测试方法运行之后运行
@AfterClass 全局只会执行一次,而且是最后一个运行
@Test(excepted=XX.class) 在运行时忽略某个异常
@Test(timeout=毫秒) 允许程序运行的时间
@Ignore 所修饰的方法被测试器忽略。
@RunWith 可以修改测试运行器 org.junit.runner.Runner
import org.junit.*;
import static org.junit.Assert.*;

public class DivideTest4 {
    @Before
    public void setUp() throws Exception {
        System.out.println("divide开始");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("divide结束");
    }

    @BeforeClass
    public static void beforeClass() {
        System.out.println("测试Divide开始");
    }

    @AfterClass
    public static void afterClass() {
        System.out.println("测试Divide结束");
    }

    @Test
    public void divide() throws Exception {
        int a[] = {1, 2147483647, 1};
        int b[] = {1, 1, 0};
        for (int i = 0; i < a.length; i++) {
            int z = Divide.divide(a[i], b[i]);
            System.out.println(z);
        }
    }

    @Test
    public void divide1() throws Exception {
        int a[] = {1, 2147483647, 1};
        int b[] = {1, 1, 2};
        int x[] = {1, 2147483647, 1};
        for (int i = 0; i < a.length; i++) {
            int z = Divide.divide(a[i], b[i]);
            System.out.println(z);
            assertEquals(x[i], z);//断言
        }
    }
}

错误解释

  1. Failure 一般是单元测试使用的断言方法判断失败引起,说明预期结果和程序运行结果不一致。
  2. error 是有代码异常引起的,他产生于测试代码本身中的Bug。
  3. 测试用例,不是用来证明你是对的,而是用来证明你没有错。

测试套件

组织测试类一起运行的测试类。

测试代码结构

  1. 作为测试套件的入口类,类中不能包含任何方法。
  2. 更改测试运行器Suite.class。
  3. 将需要运行的测试类放入Suite.SuiteClasses({})的数组中。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({AddTest.class,DivideTest4.class})
public class SuiteTest {
    /*
     * 1.测试套件就是组织测试类一起运行的
     *
     * 写一个作为测试套件的入口类,这个类里不包含其他的方法
     * 更改测试运行器Suite.class
     * 将要测试的类作为数组传入到Suite.SuiteClasses({})
     */
}

参数化设置

有时候我们只想只测试数据,不测试方法。

测试流程

  1. 要进行参数化测试,需要在类上面指定如下的运行器:@RunWith (Parameterized.class)
  2. 然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。
  3. 在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import static org.junit.Assert.assertEquals;

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

    //5.运行测试方法,即可完成对多组数据的测试
    @Test
    public void testAdd() {
        assertEquals(expected, Add.add(input1, input2));
    }

}

代码构造

IntelliJ IDEA

支持JUnit构造器(Generate)直接构造的。

  1. 工程中添加以上代码需要的一些import依赖
  2. 创建被测试类
  3. 光标放到被测试类的类名上
  4. Ctrl+Shift+T选择Creat new Test(IDE的快捷键是默认IDEA的)
  5. 选择对应的设置,点击Ok

JUnit Java单元测试_第1张图片

Eclipse

也支持直接构造,具体可参照百度。

demo

http://download.csdn.net/detail/demonliuhui/9828939

你可能感兴趣的:(Java笔记)