2016-07-27 5 views
0

TestNG 6.8.8理解テストスイート

私は、次のインタフェースがあります。今、私はMyInterface実装の束を持って

public interface MyInterface{ 
    /** 
    * Some contract 
    **/ 
    public String convert(String arg); 
} 

JavaDocで定義されている一般契約と特定の実装の詳細をテストしたいと思います。私はこのような何か書きたい:

public class MyInterfacecontractTestSuite{ 

    @Test(dataProvider="someDataProvider") 
    public void testContract(MyInterface mi, String arg){ 
     //test 
    } 
} 

と、例えば

public class MyInterface1ImplTest{ 
    //test cases for the implementation MyInterface1Impl 
} 

をしかし、それはMyInterface1Implための例は、すべてのかもしれないMyInterface1ImplTestクラスではないことに少し厄介に見えますちょっと混乱します。

しかし、すべての実装テストクラスで一般契約の重複テストケースを置くのも変です。

私は正しい方法であれば分かりません。おそらく、そのような契約をテストするためのより良い解決策があります。

答えて

1

なぜのようなものがない:

public abstract class MyInterfacecontractTestSuite { 

    @Test(dataProvider="someDataProvider") 
    public void testContract(String arg) { 
     //test against getMi() 
    } 

    public abstract MyInterface getMi(); 
} 

public class MyInterface1ImplTest extends MyInterfacecontractTestSuite { 

    private MyInterface1Impl mi; // init somewhere 

    public MyInterface getMi() { 
     return mi; 
    } 

    //test cases for the implementation MyInterface1Impl 
} 
+0

をはい、私はアイデアのこの種について考え、それを拒否しました。インプリメンテーションで基本的な契約をテストするために必要な複数のインタフェースが実装されている場合はどうすればよいですか?私はそれが問題かもしれないと思った...しかし、とにかく、それは良く見える。 – user3663882

+0

実装が実装しているインターフェイスに応じて、Factory(http://testng.org/doc/documentation-main.html#factories)を実装し、MyInterfacecractractTestSuite(およびその他のインターフェイス関連のテストクラス)を生成することができます。しかし、重複よりも複雑になる可能性があります。 – juherr

関連する問題