JUnit4.8.2ソース分析-3.1 Description-テストツリー


もう一度org.junit.runner.Descriptionのソースコードを読んで、Descriptionが表すテストツリーをグループテスト(Suite)と組み合わせて理解します.
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 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()は、その意図がわかりません.