用一个test测试多个类



假设我有一个接口,两个类都实现了它。所以我们有接口I,类A和b。对于这两个类,我们需要用JUnit4测试相同的实现函数doSomething()。有一些依赖,所以我们使用Mockito。一个测试示例如下:

@Mock private dependantClass d;
@Test
public void test() {
    A.doSomething();
    verify(d).expectedBehavior();
}

我已经为A编写了测试套件(4个测试),没有问题。但是,现在我必须重构测试套件,以便可以对A和B对象执行相同的测试类。为此,我应该使用并行的类层次结构。

这把我难住了。我已经尝试使用@Parameters注释,但这给了我错误,我有太多的输入参数。我试过做一个超级测试类,ATest和BTest都从扩展,但我猜我没有做对,因为我得到空指针异常。

实际上复制所有测试用例并将A更改为B通过所有测试,也就是说这两个类做相同的事情。我意识到这听起来像是有缺陷的设计,老实说,它可能是。然而,我不可能实际修改代码,我只需要测试它。

是我做错了吗?我应该如何实现这一点?

你可以试试JUnit Theories:

@RunWith(Theories.class)
public class AdditionWithTheoriesTest {
  private dependantClass d;
  @Before
  public void before() {
    d = mock(dependantClass);
  }
  @DataPoints
  public static I[] positiveIntegers() {
    return new I[]{
      new A(d),          //inject d into A, may differ
      new B(d)           //inject d into B, may differ
    };
  }
  @Theory
  public void test(I data) {
    data.doSomething();
    verify(d).expectedBehavior();
  }

@Parameters也可以这样做(如果配置正确)。而@Parameters更适合于用多个数据测试一个类。@Theories表示对不同的参数(例如多个类)断言相同的行为。

相关内容

  • 没有找到相关文章

最新更新