我是JMockit和junit的新手。我正在处理一个例子,其中一个子类直接引用它的父类的一个成员(我知道,这不是理想的,但这就是我所掌握的)。
前:
public class A {
protected Something X;
public A() {
X = new Something();
}
}
public class B extends A {
public void methodUnderTest() {
X.somethingMoreSpecific();
}
}
我已经能够很好地模拟父类方法,但是我如何处理被测试的类,直接引用其中一个父类成员对象?
答案 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()
应该有自己的单元测试,但你可以采用任何一种方式。