Java 强制jUnit测试覆盖整个接口

Java 强制jUnit测试覆盖整个接口,java,junit,Java,Junit,我如何强制我的测试类覆盖一个特定的接口 还有编写重载测试方法的约定,因此名称是一致的(我目前的技术类似于:methodName+parameter1Type+parameter2Type+…) 我希望如果有一个好的方法来解决第一个问题,那么第二个问题将被覆盖/避免 我的问题是我的类实现了许多接口。因为我正在测试Spring注入的服务类,所以每样东西都至少有一个接口 总之,我有一个类实现: public interface MyInterface{ int doFoo(int input

我如何强制我的测试类覆盖一个特定的接口

还有编写重载测试方法的约定,因此名称是一致的(我目前的技术类似于:methodName+parameter1Type+parameter2Type+…)

我希望如果有一个好的方法来解决第一个问题,那么第二个问题将被覆盖/避免


我的问题是我的类实现了许多接口。因为我正在测试Spring注入的服务类,所以每样东西都至少有一个接口

总之,我有一个类实现:

public interface MyInterface{
    int doFoo(int input);
    int doBar(int input);
}
假设MyInterfaceImpl实现了这个接口

现在,我的测试类将类似于:

import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class MyInterfaceImplTest{
    private MyInterface = new MyInterfaceImpl(); //could inject it...

    @Test
    public void doFooTest(){
       //content of test not relevant
    }

    @Test
    public void doBarTest(){
       //content of test not relevant
    }
}
现在就规模而言,上面的测试还不错,但很难知道我是否已经涵盖了大班的所有测试,我可能错过了一个。此外,我发现为重载方法创建方法名很有必要。我还可以向类添加功能,但可能会错过它。如果我在做TDD,这几乎是不可能的,但我仍然想确定。我一直想写的是

public class MyInterfaceImplTest implements MyInterface{

然后我想在每个方法前面加上@Test。当然,这是行不通的,因为测试需要输入值。但是使用implements可以让IDE添加方法,并强制实现完整的接口。明确地说,我知道我并不打算在测试中实际实现接口,但我认为如果我可以这样做,它可以加快开发速度。

对我来说,这取决于“强制”和“覆盖特定接口”的含义

如果您的接口方法暗示了某些“约定”(例如,如果调用的结果是修改了接收集合,则java.util.Collection.add()将返回true),您可以创建一个


如果您想看到一个测试主题的所有方法都由一个特定的测试类执行,那么您可以在代码覆盖率工具(如或)下运行测试,并确保结果符合您的喜好。

对我来说,这取决于您所说的“强制”和“覆盖特定接口”的含义

如果您的接口方法暗示了某些“约定”(例如,如果调用的结果是修改了接收集合,则java.util.Collection.add()将返回true),您可以创建一个


如果您希望看到某个测试主题的所有方法都由特定的测试类执行,您可以在代码覆盖率工具(如或)下运行测试,并确保结果符合您的喜好。

您可能应该研究参数化测试。下面是它的外观:


您可能应该研究参数化测试。下面是它的外观:


我想的越晚,所以我要找的不在jUnit的范围内?我想的越晚,所以我要找的不在jUnit的范围内?
@Test(dataProvider = "dp")
public testInterface(StrategyInterface si) {
  // will be invoked twice, one with each implementation
}

@DataProvider
static public Object[][] dp() {
  return new Object[][] {
    new Object[] { new Strategy1Impl() },
    new Object[] { new Strategy2Impl() },
  };
}