junit 4のパラメータ化テスト
2623 ワード
私たちが時々テストするとき、テストデータの構造が異なり、他のものが同じ場合に役立つ可能性があることを解決するために設計されていると思います.
パラメトリックテストの作成は少し面倒です(もちろんこれはJUnitの他の特性に対して):
1.パラメトリックテストを使用するテストクラスを準備するための特殊なドライバorgを指定する.junit.runners.Parameterized.
2.テストクラスに対していくつかの変数を宣言し、それぞれ期待値とテストに使用するデータを格納します.
3.テストクラスに注釈を使用するorgを宣言する.junit.runners.Parameterized.Parametersで修飾された、
戻り値はjavaです.util.Collectionの共通静的メソッドで、テストが必要なすべてのパラメータペアを初期化します.
4.テストクラスにパラメータを持つ共通構造関数を宣言し、2番目のセクションで宣言されたいくつかの変数に値を割り当てます.
5.テスト方法を作成し、定義した変数をパラメータとしてテストする.
import java.util.Collection;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class ParameterizedTest {
private String extected;
private String target;
public ParameterizedTest(String target,String extected) {
super();
this.target = target;
this.extected = extected;
}
@Parameters
public static Collection<?> contructData(){
return Arrays.asList(new Object[][]{
{"aaa","AAA"},
{null,null},
{"",""},
{"BBB","BBB"}
});
}
@Parameters
public static Collection<?> contructData1(){
return Arrays.asList(new Object[][]{
{"aaa1","AAA1"},
{null,null},
{"",""},
{"BBB1","BBB1"}
});
}
public String toUpperCase(String str){
if(null == str){
return str;
}
return str.toUpperCase();
}
@Test
public void testUpperCase(){
Assert.assertEquals(extected, toUpperCase(target));
}
}
また、この場所が実現していないと感じたのは、クラス全体で@Parametersと書かれた最初のstatic静的メソッドだけが機能していることです.
柔軟な使用が制限されています.注釈の処理部分を見てみましょう
List
.getAnnotatedMethods(Parameters.class);
for (FrameworkMethod each : methods) {
int modifiers= each.getMethod().getModifiers();
if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
return each;
}
実際には1つ目を見つけて戻ってきますが、実際には柔軟にするために、もう一度マークして、特別な方法を探して、複数の方法のparametrizedのテストを1つのクラスに入れることができます.もちろんそうすれば、他にも悪いところがあるに違いない.