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类中,这可能会造成混淆。

但是在每个实现测试类中为总合同放置一个重复的测试用例也是很奇怪的。

因此,我不确定自己的方法是否正确。也许有更好的解决方案来测试此类合同。

最佳答案

为什么没有这样的东西:

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
}

10-05 21:11