junit入门

2020-01-20  本文已影响0人  dounine

0. 前言

结合之前卓越班《软件开发环境与工具》课程所教的junit,以及此次的软件测试大赛,决定入门学习一下junit

此处使用IDEA作为开发工具。

1. 环境准备

  1. IDEA新建一个java空项目,即新建项目页面什么都不选,直接next:

    image
  2. 新建项目成功后,需要导入项目的依赖包(即junit包)。

2. 开始

2.1. 编写计算器类,包含加减乘除四个函数

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public int sub(int a, int b) {
        return a - b;
    }

    public int mul(int a, int b) {
        return a * b;
    }

    public int div(int a, int b) {
        return a / b;
    }
}

2.2. 编写测试类,使用断言

test目录下,新建CalculatorTest测试类,内容如下:

package test;

import main.Calculator;
import org.junit.Assert;
import org.junit.Test;

/***
* @project junitDemo
* @class CalculatorTest
* @author douNine
* @date 2019/6/23 11:40
* @description TODO
*/
public class CalculatorTest {

    @Test
    public void addTest() {
        Calculator c = new Calculator();
        int result = c.add(1, 2);
        Assert.assertEquals("add error", result, 3);
    }

    @Test
    public void subTest() {
        Calculator c = new Calculator();
        int result = c.sub(3, 2);
        Assert.assertEquals("sub error", result, 1);
    }

    @Test
    public void mulTest() {
        Calculator c = new Calculator();
        int result = c.mul(1, 2);
        Assert.assertEquals("mul error", result, 2);
    }

    @Test
    public void divTest() {
        Calculator c = new Calculator();
        int result = c.div(2, 1);
        Assert.assertEquals("div error", result, 2);
    }
}

junit中的断言:

2.3. 编写出现Error和Failure的测试用例,并分析区别

2.4. junit执行过程

CalculatorTest测试类中添加如下函数,并导入相应的包:

@BeforeClass
static public void setUpClass() throws Exception {
    System.out.println("BeforeClass");
}

@AfterClass
static public void tearDownClass() throws Exception {
    System.out.println("AfterClass");
}

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

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

上述注解含义:

@BeforeClass表示该函数在所有测试函数运行之前运行;

@AfterClass表示该函数在所有测试函数运行之后运行;

@Before表示该函数在每个测试函数运行之前运行一次;

@After表示该函数在每个测试函数运行之后运行一次;

在每个测试函数中加一句输出,运行测试类结果如下:

image

2.5. 异常测试、超时测试、忽略测试

2.6. 参数化测试

package test;

import main.Calculator;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

/***
 * @project junitDemo
 * @class ParameterTest
 * @author douNine
 * @date 2019/6/23 14:10
 * @description 参数化设置测试
 */
@RunWith(Parameterized.class)
public class ParameterTest {
    int expected = 0;
    int a = 0;
    int b = 0;

    public ParameterTest(int expected, int a, int b) {
        this.expected = expected;
        this.a = a;
        this.b = b;
    }

    // 设定多组数据,给测试方法用
    @Parameterized.Parameters
    public static Collection<Object[]> date() {
        System.out.println("data");
        // 返回多组参数数据,如:{3,2,1} 赋给了 expected, a, b
        return Arrays.asList(new Object[][]{{3,2,1}, {1,22,3}});
    }

    // 设置了多少个参数则运行多少次。每次都会实例化测试类,并设置测试参数值。
    @Test
    public void addTest() {
        Calculator calutor = new Calculator();
        Assert.assertEquals(this.expected, calutor.add(this.a, this.b));
    }
}

参数化测试说明:

2.7. 同时运行多个测试类

同时运行CalculatorTestParameterTest测试类,例如:

package test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

/***
 * @project junitDemo
 * @class CommTest
 * @author douNine
 * @date 2019/6/23 14:11
 * @description 同时运行多个测试类
 */
@RunWith(Suite.class)
@Suite.SuiteClasses({
        CalculatorTest.class,
        ParameterTest.class
})
public class CommTest {
}

3. 参考

https://blog.csdn.net/qq_34264849/article/details/88243278

上一篇 下一篇

猜你喜欢

热点阅读