2015-10-29 8 views
10

私は現在、いくつかの汎用@Testを保持する抽象的なBaseTestクラスを持っています。パラメータ化された多層スイート

public abstract class BaseTest { 

    private String expected; 
    private String actual; 

    public BaseTest(String expected, String actual) { 
     this.expected = expected; 
     this.actual = actual; 
    } 

    public String methodToTest(String line) { 
     return line.trim(); 
    } 

    @Test 
    public void testNull() { 
     assertNull(methodToTest(null)); 
    } 

    // more @Tests... 
} 

SomeTestは、私は、様々なテストケースを定義BaseTestを延びています。

@RunWith(Parallelized.class) 
public class SomeTest extends BaseTest { 
    // @Parameters (test cases) goes here... 
} 

私はその後、RunAllTestsSuiteに入れBaseTestを拡張する多くのテストを、持っています。

@RunWith(Suite.class) 
@SuiteClasses({ SomeTest.class, AnotherTest.class, etc... }) 
public class RunAllTests { } 

それでは、私はより多くの@Test年代を追加したいとしましょう、しかし、私は別のクラスにそれらを含んでいたいです。

public class WhitespaceTest extends BaseTest { 

    public WhitespaceTest(String expected, String actual) { 
     super(expected, actual); 
    } 

    @Test 
    public void testNewline() { 
     assertEquals(expected, methodToTest(actual + "\n")); 
    } 

    // more @Tests... 
} 

RunAllTests内の各クラスのために、私はBaseTestWhitespaceTestを実行するように、私は、すべての単一のテストを実行するSuitesの別の「層」を必要と表示されます。このレイヤーを実装するにはどうすればいいですか?

BaseTest内::

+0

わかりません。現在のスイートに 'WhitespaceTest'を追加できないのはなぜですか?もちろん、複数のスイートがあります – dkatzel

+0

現在のスイートの各 'BaseTest'に対して' WhitespaceTest'で各テストを実行したいと思います。 –

+0

スイートの問題よりも多重継承の問題のほうが聞こえます – dkatzel

答えて

1

は、ここに私の現在の(ナイーブ)回避策この問題で

@Test 
public void testNewline() { 
    WhitespaceTest wt = new WhitespaceTest(expected, actual); 
    wt.testNewline(); 
} 

これは動作しますが、重複したコードがたくさんあります。 @TestWhitespaceTestの場合、@TestBaseTestに作成する必要があります。

+0

私はうまくいかないと思います:あなたは、(期待された、実際の)一連のパラメータでBaseTestを実行します。テスト空白は、Nullテストの動作よりも別のパラメータセットを提供します。おそらく、これはあなたのBaseTestクラスの設計上の失敗を指しているに過ぎません。 – CoronA

+0

これはうまくいきません。しかし、はい、私は現在、テストモジュール全体を、あなたが今週の早い時期にお勧めしたものに再設計しています。 –

関連する問題