JMockit,直接引用父类成员的子类

时间:2017-04-06 16:37:53

标签: java junit jmockit

我是JMockit和junit的新手。我正在处理一个例子,其中一个子类直接引用它的父类的一个成员(我知道,这不是理想的,但这就是我所掌握的)。

前:

public class A {
  protected Something X;
  public A() {
      X = new Something();
   }
}

public class B extends A {

  public void methodUnderTest() {
     X.somethingMoreSpecific();
  }
}

我已经能够很好地模拟父类方法,但是我如何处理被测试的类,直接引用其中一个父类成员对象?

2 个答案:

答案 0 :(得分:0)

关于设计你的B引用A(它是成员)的A不必是错误的设计 - 它取决于上下文 - 但它是不同的主题。

回到测试你将要测试B - 这也是A.你正试图对待A,因为它被B引用 - 但事实并非如此。也许你应该考虑构成而不是继承。

现在你可以测试B而忘记A.如果你在A中设置了X,那么你在B中设置了X(除非它是私有的) - 你可以使用它。

这里不是一个好主意,你在X内部构造函数中创建了没有args,这使得X与A紧密耦合,并且可能是你试图模拟A的原因。

答案 1 :(得分:0)

您引用A字段的事实实际上既不在这里也不在那里。 A字段是B ...

的字段

所以忘掉A。您有两种选择:您可以模拟X并只验证B.methodUnderTest()调用X.somethingMoreSpecific(),或者您可以单独留下X并测试X.somethingMoreSpecific()确实发生的所有各种事情当你致电B.methodUnderTest()时。我赞成前者,因为X.somethingMoreSpecific()应该有自己的单元测试,但你可以采用任何一种方式。