2016-04-28 7 views
0

私はGWTで単体テストを行う方法を学んでいます。だから、私はGWTTestCaseクラスを拡張し、内部にテストメソッドを記述するクラスを作成します。私はGWTTestCaseで作成するすべてのユニットテストメソッドに 'test'という接頭辞を付ける必要がありますか?

問題は、「getModuleName」メソッドから継承されたメソッドとは別に、このクラス(publicまたはprivate)の1つの関数にも 'test'という単語を追加しないと、「初期化エラー」が発生するということです。

私は何か間違っているのですか、このプレフィックスを追加するルールですか?その実際のルールの場合、これはなぜですか? '初期化エラー' の

public class hellotest extends GWTTestCase{ 
@Override 
public String getModuleName() { 
    // TODO Auto-generated method stub 
    return "hellopackage.Hello1"; 
} 

public void test() 
{ 
    assertTrue(true); 
} 

public void test2() 
{ 
    assertTrue(true); 
} 

public void notTest3()  //Produces initialization error 
{ 
    assertTrue(true); 
} 
} 

ザ・スタックトレース: -

// Compiled from Filter.java (version 1.5 : 49.0, super bit) 
public abstract class org.junit.runner.manipulation.Filter { 

    // Field descriptor #14 Lorg/junit/runner/manipulation/Filter; 
    public static final org.junit.runner.manipulation.Filter ALL; 

    // Method descriptor #16()V 
    // Stack: 1, Locals: 1 
    public Filter(); 
    0 aload_0 [this] 
    1 invokespecial java.lang.Object() [1] 
    4 return 
     Line numbers: 
     [pc: 0, line: 17] 
     Local variable table: 
     [pc: 0, pc: 5] local: this index: 0 type: org.junit.runner.manipulation.Filter 

    // Method descriptor #22 (Lorg/junit/runner/Description;)Lorg/junit/runner/manipulation/Filter; 
    // Stack: 3, Locals: 1 
    public static org.junit.runner.manipulation.Filter matchMethodDescription(org.junit.runner.Description desiredDescription); 
    0 new org.junit.runner.manipulation.Filter$2 [2] 
    3 dup 
    4 aload_0 [desiredDescription] 
    5 invokespecial org.junit.runner.manipulation.Filter$2(org.junit.runner.Description) [3] 
    8 areturn 
     Line numbers: 
     [pc: 0, line: 48] 
     Local variable table: 
     [pc: 0, pc: 9] local: desiredDescription index: 0 type: org.junit.runner.Description 

    // Method descriptor #26 (Lorg/junit/runner/Description;)Z 
    public abstract boolean shouldRun(org.junit.runner.Description arg0); 

    // Method descriptor #28()Ljava/lang/String; 
    public abstract java.lang.String describe(); 

    // Method descriptor #30 (Ljava/lang/Object;)V 
    // Stack: 2, Locals: 3 
    public void apply(java.lang.Object child) throws org.junit.runner.manipulation.NoTestsRemainException; 
    0 aload_1 [child] 
    1 instanceof org.junit.runner.manipulation.Filterable [4] 
    4 ifne 8 
    7 return 
    8 aload_1 [child] 
    9 checkcast org.junit.runner.manipulation.Filterable [4] 
    12 astore_2 [filterable] 
    13 aload_2 [filterable] 
    14 aload_0 [this] 
    15 invokeinterface org.junit.runner.manipulation.Filterable.filter(org.junit.runner.manipulation.Filter) : void [5] [nargs: 2] 
    20 return 
     Line numbers: 
     [pc: 0, line: 93] 
     [pc: 7, line: 94] 
     [pc: 8, line: 96] 
     [pc: 13, line: 97] 
     [pc: 20, line: 98] 
     Local variable table: 
     [pc: 0, pc: 21] local: this index: 0 type: org.junit.runner.manipulation.Filter 
     [pc: 0, pc: 21] local: child index: 1 type: java.lang.Object 
     [pc: 13, pc: 21] local: filterable index: 2 type: org.junit.runner.manipulation.Filterable 

    // Method descriptor #38 (Lorg/junit/runner/manipulation/Filter;)Lorg/junit/runner/manipulation/Filter; 
    // Stack: 5, Locals: 3 
    public org.junit.runner.manipulation.Filter intersect(org.junit.runner.manipulation.Filter second); 
    0 aload_1 [second] 
    1 aload_0 [this] 
    2 if_acmpeq 12 
    5 aload_1 [second] 
    6 getstatic org.junit.runner.manipulation.Filter.ALL : org.junit.runner.manipulation.Filter [6] 
    9 if_acmpne 14 
    12 aload_0 [this] 
    13 areturn 
    14 aload_0 [this] 
    15 astore_2 [first] 
    16 new org.junit.runner.manipulation.Filter$3 [7] 
    19 dup 
    20 aload_0 [this] 
    21 aload_2 [first] 
    22 aload_1 [second] 
    23 invokespecial org.junit.runner.manipulation.Filter$3(org.junit.runner.manipulation.Filter, org.junit.runner.manipulation.Filter, org.junit.runner.manipulation.Filter) [8] 
    26 areturn 
     Line numbers: 
     [pc: 0, line: 105] 
     [pc: 12, line: 106] 
     [pc: 14, line: 108] 
     [pc: 16, line: 109] 
     Local variable table: 
     [pc: 0, pc: 27] local: this index: 0 type: org.junit.runner.manipulation.Filter 
     [pc: 0, pc: 27] local: second index: 1 type: org.junit.runner.manipulation.Filter 
     [pc: 16, pc: 27] local: first index: 2 type: org.junit.runner.manipulation.Filter 

    // Method descriptor #16()V 
    // Stack: 2, Locals: 0 
    static {}; 
    0 new org.junit.runner.manipulation.Filter$1 [9] 
    3 dup 
    4 invokespecial org.junit.runner.manipulation.Filter$1() [10] 
    7 putstatic org.junit.runner.manipulation.Filter.ALL : org.junit.runner.manipulation.Filter [6] 
    10 return 
     Line numbers: 
     [pc: 0, line: 21] 

    Inner classes: 
    [inner class info: #2 org/junit/runner/manipulation/Filter$2, outer class info: #0 
    inner name: #0, accessflags: 8 static], 
    [inner class info: #7 org/junit/runner/manipulation/Filter$3, outer class info: #0 
    inner name: #0, accessflags: 0 default], 
    [inner class info: #9 org/junit/runner/manipulation/Filter$1, outer class info: #0 
    inner name: #0, accessflags: 8 static] 
} 

答えて

2

GWTTestCaseはJUnitの3のTestCaseを拡張し、JUnitの3に、試験方法は実際にtestで始まることになっています。

理由はJUnitがどのように設計されているからですか?テストケースでtestで始まるpublic voidメソッドを検索します。これは、アノテーションがまだ存在しなかったJava 5より前に行われました。現在、JUnit 4(および5)では、アノテーションを使用してテストメソッドを「フラグ」しています。

+0

gwtTestCaseを拡張するクラスで「テストケースではない」メソッドが必要な場合はどうしたらいいですか?それは可能ですか? –

+0

はい、もちろんです。 testXxxという名前を付けないでください。 –

+0

接頭辞 'test'を付けずにそのクラスの中に関数を作成した場合、privateかどうかは関係ありません。初期化エラーが発生します。 –

1

「技術的には必要ですか?あなたはまた、慣習を検討するかもしれません。

私が今までに見たユニットテストのほとんどは、まずtestWhatever()で始まります。

ポイントはです。という名前は、きれいで読みやすい保守可能なコードを書くためのコア要素です。これはプロダクションコードに当てはまります。しかし、ねえ、あなたのテストコードはプロダクションコードよりも重要だと多くの人が考えているので、きれいで読みやすくメンテナンス可能なテストコードを書くことは、ソフトウェア開発の重要な部分です。

言い換えれば、おそらくほとんどの人は、テスト方法が「テスト」で始まることを期待しています。しかし最終的には、名前は実際に何がテストされているかということです。したがって、test()、test1()、...などは、テストメソッドの名前が本当に悪いことになります。

(また、良いテストの作成に興味がある場合は、assertThatをチェックし、他のassert呼び出しの使用を忘れてください)。

+0

良い点。実際に私がここで使用した名前は物事を単純化するためのものでした。私はtest、test1のような名前は実際に使用しません。 –

関連する問題