了解TestSuites

时间:2016-07-27 12:30:59

标签: java unit-testing testng

TestNG 6.8.8

我有以下界面:

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

现在我有一堆MyInterface个实施:MyInterface1ImplMyInterface2ImplMyInterface3Impl等......

问题是我想测试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 个答案:

答案 0 :(得分: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
}