JUnit4使用
标签:开发工具

JUnit4 使用

1. 最佳实践

  1. 测试方法上必须使用@Test进行修饰
  2. 测试方法必须使用 public void 进行修饰,不能带任何的参数
  3. 新建一个源代码目录来保存我们的测试代码
  4. 测试的包应该和被测试的包保持一致
  5. 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何依赖
  6. 测试类使用Test作为类名的后缀 (非必须)
  7. 测试方法是test作为方法名的前缀 (非必须)

测试用例是不用来证明你是对的,而是用来证明你没有错

测试用例用来达到想要的预期结果,但对于逻辑错误无能为力

2. JUnit4执行流程

  1. @BeforeClass修饰的方法会在所有方法被调用前被执行,而且该方法是静态的,所以当测试类被加载后接着就会运行它,而且内存中它只会存在一份实例,它比较适合加载配置文件。
  2. @AfterClass所修饰的方法通常用来对资源进行清理,如关闭数据库连接等
  3. @Before@After会在每个测试方法的前后各执行一次。

3. JUnit常用注解

4. JUnit测试套件使用

测试套件就是组织测试类一起运行的

  1. 写一个测试套件的入口类,这个类里不包含任何其他的方法
  2. 更改测试运行器Suite.class
  3. 将要测试的类作为数组传入到Suite,SuiteClasses({ })

SuiteTest:

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

/**
 * Created By liuyao on 2018/5/10 0:10.
 */
@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTest1.class, TaskTest2.class})
public class SuiteTest {
}

TaskTest1:

import org.junit.Test;

/**
 * Created By liuyao on 2018/5/10 0:10.
 */
public class TaskTest1 {
    @Test
    public void test1() {
        System.out.println("TaskTest1");
    }
}

Test2与Test1类似

测试结果:

5. JUnit参数化设置

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

Calclute:

public class Calclute {
    public int add(int i, int j) {
        return i + j;
    }
}

Parameter:

package com.liuyao.test;

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

import static org.junit.Assert.*;

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

/**
 * Created By liuyao on 2018/5/10 0:19.
 */
@RunWith(Parameterized.class)
public class ParameterTest {
    int expected = 0;
    int input1 = 0;
    int input2 = 0;

    @Parameterized.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 test() {
        assertEquals(this.expected, new Calclute().add(this.input1, this.input2));
    }
}

测试结果:

  • 3 min read

CONTRIBUTORS


  • 3 min read