2017-04-06 43 views
1

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

例如:

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

public class B extends A { 

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

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

回答

0

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

回到测试你要测试B - 这也是A。你试图把A看作是B引用的 - 不是。也许你应该在这里考虑构图而不是继承。

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

什么是不是在这里一个好主意是创建X内部构造与无参数这使得X与一个紧密coupuled和problably是your're试图嘲笑A.

0

的事实,理由你所引用的A的字段实际上既不在这里,也不在那里。 A的字段是B的字段...

因此忘掉A。你有两种选择:你可以模拟X并且只需确认B.methodUnderTest()调用X.somethingMoreSpecific(),或者你可以让X独立并且测试X.somethingMoreSpecific()确实发生在你拨打B.methodUnderTest()时发生的所有事情。我赞成前者,因为X.somethingMoreSpecific()应该有自己的单元测试,但是你可以任意选择。