2012-01-10 19 views
10

具体的なクラスはどちらも無視されます。私はそれをどのように機能させるのですか? (IntegerDoubleの両方に対してtest1()が実行されると思います)。JUnitテスト継承が機能しない

私はJUnit 4.8.1を使用します。

更新:この問題は、JUnit自体ではなく、maven-surefire-pluginに関連しているようです。下の私の答えを見てください。

+0

あなたはTestCaseを拡張する必要がありますか? –

+0

注釈を使用する場合でも必要ですか? – agibalov

+2

Junit4ではTestCaseを拡張する必要はありませんが、どのように実行していますか?コマンドラインから? Eclipseから? – jeff

答えて

12

すべてのクラスの名前が "Test"の後に変更され、現在は動作します(Concrete1TestConcrete2Test)。

更新

のmaven-確実な - プラグインのデフォルトの設定に関連しています。デフォルトでは

http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html

、シュアプラグインが自動的に次のワイルドカードパターンを持つすべてのテストクラスが含まれます:

**/Test*.javaを - そのすべてのサブディレクトリと「テスト」で始まるすべてのJavaファイル名を含んでいます。 **/*Test.java - "Test"で終わるすべてのサブディレクトリとすべてのjavaファイル名を含みます。 **/*TestCase.java - "TestCase"で終わるすべてのサブディレクトリとすべてのJavaファイル名を含みます。

+2

これは、surefire-plugin mavenがテストの実行に使用するため、クラス名に基づいてテストを「検出」するためです。彼らはいくつかの受け入れられたパターンの1つと一致しなければなりません、BlahTestはそれらの1つです。ここでは、デフォルトの設定とあなたの設定でそれらをカスタマイズする方法についての詳細です... http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html –

+1

これは、センス。確信しているプラ​​グイン( 'mvn test'を呼び出すときに実行されるmavenプラグイン)によって使用されるデフォルトのファイル名は' **/Test * .java'、 '**/* Test.java'、' **/* TestCase .java'。 Ref:http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#includes – matsev

0

私はあなたのスケルトンコードを使用して、Eclipseでこれをテストし、それがうまく働いた:

基本クラス:

package stkoverflow; 

import org.junit.Test; 

public abstract class GenericTests<T> { 
    protected abstract T getT(); 

    @Test 
    public void test1() { 
     getT(); 
    }  
} 

サブクラス:EclipseのJUnitの中ConcreteTests1を実行

package stkoverflow; 

public class ConcreteTests1 extends GenericTests<Integer> { 

    @Override 
    protected Integer getT() { 
     return null; 
    }  
} 

をランナーはうまくいった。おそらく問題はMavenにありますか?

関連する問題