【发布时间】:2014-05-11 21:29:51
【问题描述】:
我正在尝试监视一个对象,并且我想在构造函数调用它之前存根由构造函数调用的方法。
我的班级是这样的:
public class MyClass {
public MyClass() {
setup();
}
public void setup() {
}
}
不得调用 setup 方法。那么,我如何监视这个方法(以及存根设置,使其什么都不做)?
它可以很好地模拟该方法,但我想对MyClass 进行单元测试,所以我需要其他方法。
为什么需要存根设置方法以使其不执行任何操作:
我正在编写乐高机器人(lejos),并在设置中放置了一些机器人需要工作的代码。但是,当我在 TinyVM(安装在机器人上的 VM)之外调用它时,java 崩溃,因为它没有正确初始化 VM(因为测试在我的 PC 上运行)。对于单元测试,设置并不重要。
我不能存根类/方法设置调用,因为其中一些是公共静态最终变量。
【问题讨论】:
-
是从
MyClass'构造函数调用的setup()?您的问题似乎暗示了这一点,但代码 sn-p 没有。 -
@Mureinik 谢谢。我忘记添加了。
-
这不能直接完成,因为
Mockito.spy是在预先存在的实例上调用的。 -
您是否考虑过将“设置”代码委托给不同的对象? (例如,由接口
IMyClassInitializer表示)如果你这样做了,你可以创建一个额外的构造函数来获取这个接口的一个实例,你的测试可以传递一个空对象实现。 (并且您的默认构造函数可以传递“默认”实现。)
标签: java unit-testing mocking mockito spy