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

Java JMockit,直接引用父类成员的子类,java,junit,jmockit,Java,Junit,Jmockit,一般来说,我对JMockit和junit都是新手。我正在处理一个例子,其中一个子类直接引用其父类的一个成员(我知道,这并不理想,但这就是我得到的) 例: 我已经能够很好地模拟父类方法,但是如何处理被测试的类,直接引用它的父成员对象之一?关于B引用A的x(它是成员)的设计不一定是错误的设计-这取决于上下文-但这是不同的主题 回到测试上来,你将要测试B,也就是A。你试图把A当作是B引用的-不是。也许你应该在这里考虑作文而不是继承。 现在,您可以测试B而忽略A。如果您在A中有X的setter,那么您在

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

例:


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

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

回到测试上来,你将要测试B,也就是A。你试图把A当作是B引用的-不是。也许你应该在这里考虑作文而不是继承。 现在,您可以测试B而忽略A。如果您在A中有X的setter,那么您在B中有X的setter(除非它是私有的)-您可以使用它


这里不好的地方是,您在构造函数中创建了X,但没有参数,这使得X与a紧密耦合,很可能这就是您试图模拟a的原因。

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

回到测试上来,你将要测试B,也就是A。你试图把A当作是B引用的-不是。也许你应该在这里考虑作文而不是继承。 现在,您可以测试B而忽略A。如果您在A中有X的setter,那么您在B中有X的setter(除非它是私有的)-您可以使用它


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

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


所以忘掉
A
。您有两种选择:您可以模拟
X
,只需验证
B.methodUnderTest()
调用
X.somethingMoreSpecific()
,或者您可以不使用X,测试调用
B.methodUnderTest()
时是否发生了
X.somethingMoreSpecific()
的所有事情。我倾向于前者,因为
X.somethingMoreSpecific()
应该有自己的单元测试,但您可以选择任何一种方式。

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

所以忘掉
A
。您有两种选择:您可以模拟
X
,只需验证
B.methodUnderTest()
调用
X.somethingMoreSpecific()
,或者您可以不使用X,测试调用
B.methodUnderTest()
时是否发生了
X.somethingMoreSpecific()
的所有事情。我倾向于前者,因为
X.somethingMoreSpecific()
应该有自己的单元测试,但您可以选择任何一种方式

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

public class B extends A {

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