【问题标题】:JMockit, subclass referencing member of parent class directlyJMockit,子类直接引用父类的成员
【发布时间】:2017-04-06 16:37:53
【问题描述】:

总的来说,我是 JMockit 和 junit 的新手。我正在处理一个示例,其中子类直接引用其父类的成员(我知道,不理想,但这是我得到的)。

例如:

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

public class B extends A {

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

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

【问题讨论】:

    标签: java junit jmockit


    【解决方案1】:

    关于设计,您的 B 引用 A 的 x(它是成员)不一定是错误的设计 - 这取决于上下文 - 但它是不同的主题。

    回到测试中,您将测试 B - 这也是 A。您试图将 A 视为 B 所引用的 - 它不是。也许您应该在这里考虑组合而不是继承。

    现在您可以测试 B 而忘记 A。如果您在 A 中有 X 的 setter,那么您在 B 中就有 X 的 setter(除非它是私有的) - 您可以使用它。

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

    【讨论】:

      【解决方案2】:

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

      所以忘记A。您有两个选择:您可以模拟X 并验证B.methodUnderTest() 是否调用X.somethingMoreSpecific(),或者您可以不理会X 并测试X.somethingMoreSpecific() 在您调用B.methodUnderTest() 时确实发生的所有各种事情。我更喜欢前者,因为X.somethingMoreSpecific() 应该有自己的单元测试,但你可以选择任何一种方式。

      【讨论】:

        猜你喜欢
        • 2018-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 2015-04-12
        相关资源
        最近更新 更多