JUnitのパラメトリックテストとグループテストの使用
4364 ワード
JUnitのパラメトリックテストとグループテストの簡単な使用
int a 0,a 1,a 2の代わりに配列が置換されているように、加算をテストするときにassertEquals(3.0,h.add(1,2),0.1).変数を宣言することに相当し、100個をテストするにはどうすればいいですか.
したがって、パラメトリックテストがあり、1つのCollectionを使用してすべてのデータを収集します.加算するたびにテストに必要ないくつかのデータが1つのグループを構成し、nつのグループがCollectionを構成します.
そしてJUnitの使い方の要求に従って、ユニットテストクラスを書き出します.△サボって、テストされたビジネスクラスXを書きたくありません.次の例では、テストする方法として、1つの数が奇数かどうかを判断します.
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:but was:false
3番目のデータ(0ベース)に問題があることを示します.
多くのユニットテストクラスがテストを必要とし、Suiteを構成し、みんなでテストします.たとえば、2つのユニットテストクラスが新しく書かれました.
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: but was: false
パラメトリックテスト
int a 0,a 1,a 2の代わりに配列が置換されているように、加算をテストするときにassertEquals(3.0,h.add(1,2),0.1).変数を宣言することに相当し、100個をテストするにはどうすればいいですか.
したがって、パラメトリックテストがあり、1つのCollectionを使用してすべてのデータを収集します.加算するたびにテストに必要ないくつかのデータが1つのグループを構成し、nつのグループがCollectionを構成します.
そしてJUnitの使い方の要求に従って、ユニットテストクラスを書き出します.△サボって、テストされたビジネスクラスXを書きたくありません.次の例では、テストする方法として、1つの数が奇数かどうかを判断します.
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:
3番目のデータ(0ベース)に問題があることを示します.
グループテスト
多くのユニットテストクラスがテストを必要とし、Suiteを構成し、みんなでテストします.たとえば、2つのユニットテストクラスが新しく書かれました.
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: