您的位置:首页 > 其它

JUnit使用参数测试和一组测试

2015-08-14 11:45 489 查看
JUnit该参数测试和一组测试使用简单

参数测试

作为替代阵列int a0,a1,a2喜欢,当测试加法assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要測试100个怎么办。

所以,有了參数化測试,使用一个Collection收集全部的数据——加法时每一次測试须要的几个数据构成一组,n个组构成Collection

然后依照JUnit的使用方法要求,写出单元測试类。(偷懒一下,不想写被測试的业务类X了。

以下的样例中如果要測试的方法是,推断一个数是否奇数。)

package myTest.param;
import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)//1.必须
public class ParametTestUnit {
private int input;
private boolean expected;//expected result
/**
* 2.public 构造器赋值一组測试数据
*/
public ParametTestUnit(int input,boolean expected ) {
this.input = input;
this.expected = expected;
}

/**
* 3.由@Parameterized.Parameters修饰一个
* public static Collection xxx()
*/
@Parameterized.Parameters
public static Collection data() {
return Arrays.asList(new Object[][] {
{ 1, true },
{ 3, true },//
{ 6, false },
{ 11, true },
{ 22, false },
{ 23, true }
});
}

/**
* 4.JUnit循环地使用各组数据
*/
@Test
public void testOdd() {
System.out.println("Parameterized Number is : " + input);
assertEquals(expected, input%2!=0);
}
}
如今这个单元測试类编写完毕,可是在BlueJ中不可以直接执行它(不支持?)。自己写一个Main好了。

package myTest.param;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class Main {
public static void go() {
Result result = JUnitCore.runClasses(ParametTestUnit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
执行结果:

Parameterized Number is : 1

Parameterized Number is : 3

Parameterized Number is : 6

Parameterized Number is : 11

Parameterized Number is : 22

Parameterized Number is : 23

true

如今,将某个数据改动一下,如{ 11, true }改成{ 10, true },执行结果:

Parameterized Number is : 1

Parameterized Number is : 3

Parameterized Number is : 6

Parameterized Number is : 10

Parameterized Number is : 22

Parameterized Number is : 23

testOdd[3](myTest.param.ParametTestUnit): expected:<true> but was:<false>

false

表示第3个数据(基于0)有问题。

成组測试

有非常多单元測试类须要測试,将它们组成一个Suite。大家一起測试。

比如新写了两个单元測试类:

package myTest.param;
import static org.junit.Assert.assertEquals;
public class AddUnit1 {
@org.junit.Test
public void testAdd() {
System.out.println("Inside AddUnit1");
assertEquals(3, 1+2);
}
}
package myTest.param;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
public class AddUnit2 {
@org.junit.Test
public void testSth() {
System.out.println("Inside AddUnit2");
assertThat("Zero is one", 0, is(not(1))); // passes
assertThat("Zero is one", 0, is(1)); //fail
}
}
将它们组成一个Suite,须要写捆绑代码,清晰起见。单独用一个类。

package myTest.param;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
AddUnit1.class,
AddUnit2.class,
//ParametTestUnit.class
})
public class SuiteUnit {}
还是用上面的Main,改动为runClasses(SuiteUnit.class); 执行结果:

Inside AddUnit1.testAdd()

Inside AddUnit2.testSth()

testSth(myTest.param.AddUnit2): Zero is one

Expected: is <1>

got: <0>

false

能够把对ParametTestUnit.class的測试也加进来。执行结果:

Inside AddUnit1.testAdd()

Inside AddUnit2.testSth()

Parameterized Number is : 1

Parameterized Number is : 3

Parameterized Number is : 6

Parameterized Number is : 10

Parameterized Number is : 22

Parameterized Number is : 23

testSth(myTest.param.AddUnit2): Zero is one

Expected: is <1>

got: <0>

testOdd[3](myTest.param.ParametTestUnit): expected:<true> but was:<false>

false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: