JUnit4.8.2ソース分析-3.1 Description-テストツリー
3385 ワード
もう一度org.junit.runner.Descriptionのソースコードを読んで、Descriptionが表すテストツリーをグループテスト(Suite)と組み合わせて理解します.
Descriptionは、コンビネーションモードを使用してテストの情報を記述します.すべての要素はComponentオブジェクトです.
例えばmyTest.unitsパッケージにはUnit 1、Unit 2、Unit 3があり、SuiteUnitはUnit 2、Unit 3、myTestとなる.param.ParametTestUnitはグループを構成しています.
null myTest.units.Unit1 m1(myTest.units.Unit1) m2(myTest.units.Unit1) myTest.units.SuiteUnit myTest.units.Unit2 test2(myTest.units.Unit2) myTest.units.Unit3 testSth(myTest.units.Unit3) myTest.param.ParametTestUnit [0] testOdd[0](myTest.param.ParametTestUnit) [1] testOdd[1](myTest.param.ParametTestUnit) [2] testOdd[2](myTest.param.ParametTestUnit) [3] testOdd[3](myTest.param.ParametTestUnit) [4] testOdd[4](myTest.param.ParametTestUnit) [5] testOdd[5](myTest.param.ParametTestUnit) the total number of atomic tests = 10
木の葉をテストします.これです.getChildren().size()が0のノードです.isTest()(葉の有無)はtrueを返します.Descriptionの2つの命名定数EMPTY(名前は「NoTests」)とTEST_MECHANISM(名前は「Test mechanism」)は特殊な葉です.しかし、通常はテストされた方法(atomic/a single test)、または@testを表します.次の情報が含まれます.
privatefinal ArrayList fChildren= newArrayList();//要素なし
privatefinal String fDisplayName;
privatefinal Annotation[] fAnnotations;
ツリーの一般要素/Compositeをテストし、fChildrenでサブノードを保存します.1つのユニットテストクラスのDescriptionのように、サブノードはすべての@test修飾の方法を含む.一方、Suiteのサブノードには、いくつかのユニットテストクラスのDescriptionが含まれており、ユニットテストクラスとグループテストクラスは、より大きなCompositeを構成することができる.
注意:ユニットテストクラスDescriptionのサブノードには@Beforeなどの修飾方法は含まれません.
関連メソッド:
String getDisplayName():fDisplayNameを返します.本明細書で説明する印刷用の名前は、一般的にクラスフルネームまたはJUnitのメソッド文字列、例えばmethod(属するクラスのフルネーム)がよく用いられる.
String getClassName()、String getMethodName():メソッド文字列を解析し、@test修飾メソッドに関連するクラスのフルネームとメソッド名を取得します.Class getTestClass()は、getClassName()の戻り値がパラメータnameによってClassを呼び出す.forName(name);
ArrayListgetChildren():fChildrenを返します.
void addChild(Description description)
isTest()(葉かどうか)、isSuite(組み合わせかどうか):反発する一対の判断
isEmpty()
CollectiongetAnnotations():fAnnotations配列形式をCollectionに変換します.このDescriptionに対応する要素の前に使用する寸法.
TgetAnnotation(Class annotationType).fAnnotationsに含まれているかどうか.
@Override hashCode()、equals(Object obj)、toString();
組合せモードにおけるOperation()の対応物はint testCount()であり,含まれるリーフテストの総数である.
Descriptionにはプライベートコンストラクタがあり、静的な方法でDescriptionオブジェクトを得ることができます.
Description childlessCopy()は、その意図がわかりません.
Descriptionは、コンビネーションモードを使用してテストの情報を記述します.すべての要素はComponentオブジェクトです.
例えばmyTest.unitsパッケージにはUnit 1、Unit 2、Unit 3があり、SuiteUnitはUnit 2、Unit 3、myTestとなる.param.ParametTestUnitはグループを構成しています.
public static void tree(){
Request rqst = Request.classes(Unit1.class,SuiteUnit.class);
Runner r=rqst.getRunner();
Description descr = r.getDescription();
String prefix = "";
print(descr,prefix);
pln( "the total number of atomic tests = "+descr.testCount() );//the total number of atomic tests.
}
public static void print(Description now,String prefix){
pln(prefix+ now.getDisplayName() );
if(now.isSuite()) {
prefix+=" ";
for (Description x : now.getChildren()){
print(x,prefix);
}
}
}
実行tree()の出力は、次のとおりです.null myTest.units.Unit1 m1(myTest.units.Unit1) m2(myTest.units.Unit1) myTest.units.SuiteUnit myTest.units.Unit2 test2(myTest.units.Unit2) myTest.units.Unit3 testSth(myTest.units.Unit3) myTest.param.ParametTestUnit [0] testOdd[0](myTest.param.ParametTestUnit) [1] testOdd[1](myTest.param.ParametTestUnit) [2] testOdd[2](myTest.param.ParametTestUnit) [3] testOdd[3](myTest.param.ParametTestUnit) [4] testOdd[4](myTest.param.ParametTestUnit) [5] testOdd[5](myTest.param.ParametTestUnit) the total number of atomic tests = 10
木の葉をテストします.これです.getChildren().size()が0のノードです.isTest()(葉の有無)はtrueを返します.Descriptionの2つの命名定数EMPTY(名前は「NoTests」)とTEST_MECHANISM(名前は「Test mechanism」)は特殊な葉です.しかし、通常はテストされた方法(atomic/a single test)、または@testを表します.次の情報が含まれます.
privatefinal ArrayList
privatefinal String fDisplayName;
privatefinal Annotation[] fAnnotations;
ツリーの一般要素/Compositeをテストし、fChildrenでサブノードを保存します.1つのユニットテストクラスのDescriptionのように、サブノードはすべての@test修飾の方法を含む.一方、Suiteのサブノードには、いくつかのユニットテストクラスのDescriptionが含まれており、ユニットテストクラスとグループテストクラスは、より大きなCompositeを構成することができる.
注意:ユニットテストクラスDescriptionのサブノードには@Beforeなどの修飾方法は含まれません.
関連メソッド:
String getDisplayName():fDisplayNameを返します.本明細書で説明する印刷用の名前は、一般的にクラスフルネームまたはJUnitのメソッド文字列、例えばmethod(属するクラスのフルネーム)がよく用いられる.
String getClassName()、String getMethodName():メソッド文字列を解析し、@test修飾メソッドに関連するクラスのフルネームとメソッド名を取得します.Class getTestClass()は、getClassName()の戻り値がパラメータnameによってClassを呼び出す.forName(name);
ArrayList
void addChild(Description description)
isTest()(葉かどうか)、isSuite(組み合わせかどうか):反発する一対の判断
isEmpty()
Collection
@Override hashCode()、equals(Object obj)、toString();
組合せモードにおけるOperation()の対応物はint testCount()であり,含まれるリーフテストの総数である.
Descriptionにはプライベートコンストラクタがあり、静的な方法でDescriptionオブジェクトを得ることができます.
Description childlessCopy()は、その意図がわかりません.