Java单元工具——JUnit

JUnit简介

JUnit是一个用于编写可复用测试集的简单框架,是xUnit的一个子集。xUnit是一套基于测试驱动开发的测试框架,包括PythonUnit、CppUnit、JUnit。

JUnit4学习

基本使用

1、使用idea IDE 进行单元测试,首先需要安装JUnit 插件。

2、创建需要被测试的类

Calculate.java

1
2
3
4
5
6
7
8
9
10
11
12
package com.imooc.util;
public class Calculate {
public int add(int a,int b){
return a+b;
}
public int subtract(int a,int b){
return a-b;
}
}

3、在Calculate类中右键选择go to -> Tets ,创建这个类的测试类 CalculateTest.java

CalculateTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.imooc.util;
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculateTest {
@Test
public void add() throws Exception {
//测试代码
assertEquals(6,new Calculate().add(2,4));
}
@Test
public void subtract() throws Exception {
assertEquals(-2,new Calculate().subtract(2,4));
}
}

测试正确时,显示结果:

1
Process finished with exit code 0

测试错误时,显示结果:

1
2
3
java.lang.AssertionError:
Expected :6
Actual :-2

注意事项

  • 测试方法上面必须使用@Test注解进行修饰。
  • 测试方法必须使用public void 进行修饰,不能带有任何参数。
  • 新建一个源代码目录用来存放测试代码。
  • 测试类的包应该与被测试类的包保持一致。
  • 测试单元中的每一个方法必须独立测试,每个测试方法之间不能有依赖。
  • 测试类使用Test做为类名的后缀(非必要)。
  • 测试方法使用test作为方法名的前缀(非必要)。

测试失败的两种情况

1、Failure 一般是单元测试使用的断言方法判断失败引起,说明预期结果和程序运行结果不一致。

2、error 是有代码异常引起的,他产生于测试代码本身中的Bug。

* 测试用例是不是用来证明你是对的,而是用来证明你没有错。测试用例用来达到想要的预期结果,但是对逻辑性错误无能为力。

JUnit运行流程

  • @Test:将一个普通的方法修饰成为一个测试方法
  • @BeforeClass:它会在多有的方法运行前被执行,static修饰
  • @AfterClass:它会在多有的方法运行后被执行,static修饰
  • @Before:会在每一个测试方法被运行前执行
  • @After:会在每一个测试方法被运行后执行

1、@BeforeClass所修饰的方法在所有方法加载前执行,而且他是静态的在类加载后就会执行该方法,在内存中只有一份实例,适合用来加载配置文件。

2、@AfterClass所修饰的方法在所有方法执行完毕之后执行,通常用来进行资源清理,例如关闭数据库连接。

3、@Before和@After在每个测试方法执行前都会执行一次。

4、@BeforeClass -> @Before -> @Test -> @After -> @AfterClass

JUnit常用注解

1、@Test(excepted=XX.class) 在运行时忽略某个异常。

2、@Test(timeout=毫秒) 允许程序运行的时间。

3、@Ignore 所修饰的方法被测试器忽略。

4、RunWith 可以修改测试运行器 org.junit.runner.Runner

JUnit测试套件

测试套件是组织测试类一起运行的测试类。具体如下:

代码Demo:

1
2
3
4
5
6
@RunWith(Suite.class)
@Suite.SuiteClasses({UserTest1,UserTest2,UserTest3})
public class SuiteTest{
}

注意事项:

1、作为测试套件的入口类,类中不能包含任何方法。

2、更改测试运行器Suite.class。

3、将需要运行的测试类放入Suite.SuiteClasses({})的数组中。

JUnit参数化设置

具体步骤:

1、更改默认的测试运行器为@RunWith(Parameterized.class)。

2、声明变量来存放预期值和结果值。

3、声明一个返回值为Collection的公共静态方法,并用@Parameters修饰。

4、为测试类声明一个带有参数的公共构造函数,并在其中为他声明变量赋值。

代码Demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@RunWith(Parameterized.class)
public class parameterTest {
int expected = 0;
int input1 = 0;
int input2 = 0;
@Parameters
public static Collection<Object[]> t() {
return Arrays.asList(new Object[][]{
{3,1,2},
{5,2,3}
});
}
public parameterTest(int expected,int input1,int input2) {
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
}
@Test
public void testAdd() {
assertEquals(expected, UserDao.add(input1,input2));
}
}
您的支持将鼓励我继续创作~