2011-06-23 4 views
1

私はいくつかのテストを実行するために "パラメータ化された"ランナーを使用しています。私はXMLファイルからテストデータを生成しています。これは正常に動作します。サブクラスは、Javaの抽象スーパークラスの静的メソッドの動作を変更できますか?

ここでは、テストデータ生成コードを複製することなく、この動作を複数のテストクラスに適用したいと考えています。そこで、XMLファイルからテストデータを読み込む抽象クラスを作成しました。サブクラスがどのXMLファイルを使用するかを知ることができれば、目標を達成できます。

しかし、私はこれを行う方法を見つけることができませんでした。

これは

@RunWith(Parameterized.class) 
public abstract class AbstractXMLDrivenTest{ 
    @@Parameters 
    public static Collection<Object[]> generateData() { 
     /* Reads an XML File and returns test input data */ 
    } 
} 

私のスーパークラスです。ここだ、私はAbstractXMLDrivenTestにTestSomethingためのものXMLファイルを使用する場合、これは正常に動作し、サブクラス

public class TestSomeThing extends AbstractXMLDrivenTest { 
    public TestSomeThing(args) { 
    /* Args are populated by generateData in superclass */ 
    } 
} 

です。 他のテストケースでもスーパークラスを使用できるように、XMLファイルをサブクラス、つまりTestSomethingで定義します。これが今はっきりしていることを願っています

+0

ソースコードの例を教えてください。 –

+1

ここにポイントがありませんでした。静的メソッドでXMLを生成するのはなぜですか?なぜソリューションは継承(対構成)を含まなければならないのですか? –

答えて

0

静的メソッドは、Javaでオーバーライドすることはできません - に関係なく、クラスが抽象的であるかどうか。

2

Javaの静的メソッドの継承はありません。また、クラスが抽象クラスであるかどうかにかかわらず、静的メソッドには違いはありません。クラスは静的メソッドのスコープ関数しか持っていません。

継承を使用するには、非静的メソッドを使用してください。これにより、サブクラスの非静的メソッドまたは非静的フィールドからXMLファイル名を抽出できます。

+0

パラメータ化されたテストランナーは、テストデータの生成を静的にする必要があります。動作する方法は、すべてのテスト実行のテストデータを静的に生成し、テストデータのインスタンスごとにテストケースオブジェクトを作成し、テストケースを実行することです。 –

+0

Ok - その場合、静的メソッドから非静的メソッドを呼び出すことができます。 generateData'は、 '()新しいTestSomeThingを返さない'からnonStaticGenerateData(); 'または類似(私は – Nick

+0

をあなたの正確なパラメータを知らないが、スーパークラスは、サブクラスを参照しますと、私がすることはできません。 。。別のサブクラスのスーパークラスを使用 –

0

ただ1つのサブクラスで十分です。テストサブクラスを掛ける代わりに、異なるテストファイルでテストメソッドを呼び出すだけです。実際には、テストクラスをサブクラスにするのではなく、それだけで別のクラスにすることをお勧めします。

業界標準のテストを使用する場合は、JUnitを参照してください。

編集:
この文書は慎重に読まれていません。サブクラスはまったく必要ありません。 あなたは、配列構築としてさまざまなテストケースをgenerateDataで構築します。 あなたの場合は、{("test1.xml", objectResult1), ("test2.xml", objectResult2),...}という形式のペアの配列があります。テストクラスのコンストラクタは、 ParametrizedTest(String fileXML, ObjectResult result)の形式です。

+0

これはJUnitです。 http://blogs.oracle.com/jacobc/entry/parameterized_unit_tests_with_junit –

+0

@Lalit Mishraはリンクに感謝します。私の編集を参照してください。 – toto2

0

xmlファイル名がスーパークラスの静的メンバーとして格納されている場合は、generateTestDataが呼び出される前にサブクラスに値を割り当ててください。

関連する問題