JUnit是XUnit中的一种,XUnit包括PythonUnit、CPPUnit以及JUnit。XUnit是测试驱动开发的一套框架。
JUnit是Java单元测试,它的地址是 junit官网,可以从官网了解与下载。
一、第一个test方法:
- 测试方法必须使用@Test进行修饰。
- 测试方法必须使用public void进行修饰,不能带任何的参数。
- 新建一个源代码目录来存放我们的测试代码。
- 测试类的包应该和被测试类保持一致。
- 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖。
- 测试类使用Test作为类名的后缀(非必须)。
二、failure和error的区别:
- failure一般由单元测试使用的断言方法判断失败所引起的,这表示测试点发现了问题,就是说程序输出的结果和我们预期的不一样。
- error是由代码异常引起的,他可以产生于测试代码本身的错误,也可是被测试代码中的一个隐藏的bug。
- 测试用来不是证明你是对的,而是用来证明你没有错。
三、各种注解:
- @BeforeClass修饰的方法会在所有方法被调用前被执行,而且该方法是静态的,所以当测试类被加载后接着就会运行他,而且在内存中他只会存在一份实例,他比较适合加载配置文件。
- @AfterClass修饰的方法通常用来对资源的清理,如关闭数据库的链接。
- @Before和@After会在每个测试方法的前后各执行一次。
- @Test(expected=ArithmeticException.class):预期会出算术异常,发生了,符合预期,否则,不符合预期。
- @Test(timeout = 2000):指定执行的时间,单位为毫秒。如果超过这个时间了,就被认为是error。
- @Ignore:所修饰的测试方法会被测试运行期忽略。
- 断言的注解。assertEquals相等就通过,assertNotEquals不相等就通过。
四、测试套件:
- 测试套件就是组织测试类一起运行的。
- 写一个作为测试套件的入口类,这个类里不包含其他的方法。
- 更改测试运行器:@RunWith(Suite.class)。
- 将要测试的类作为数组传入到Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})。
@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})
public class SuiteTest {
}
五、参数化设置:
- 更改默认的测试运行器为:@RunWith(Parameterized.class)
- 声明变量来存放预期值和结果值:int expected = 0; int input1 = 0; int input2 = 0;
- 声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰。
- 为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值。
@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, new Calculate().add(input1,input2));
}
}