Mockito Spy-调用构造函数之前的存根
我试图监视一个对象,并且想在构造函数调用它之前对构造函数调用的方法进行存根。
我的课看起来像这样:
public class MyClass { public MyClass() {
setup();
}
public void setup() {
}
}
不能调用setup方法。好吧,我如何监视这种方法(以及存根设置,使其什么也不做)?
模拟方法可以很好地工作,但是我想进行单元测试MyClass
,因此我将需要其他方法。
之所以需要对设置方法进行打桩以使其无能为力的原因:
我正在对Lego机器人(lejos)进行编程,并在设置中放入了一些代码,该代码需要该机器人能够工作。但是,当我在TinyVM(安装在机器人上的VM)之外调用它时,java崩溃了,因为尚未正确初始化VM(因为测试是在我的PC上运行的)。对于单元测试,设置并不重要。
我无法对类/方法设置调用进行存根处理,因为其中一些是公共静态最终变量。
回答:
感谢您的建议,但这有点太复杂了。
最后,我通过扩展类并覆盖我的设置方法来模拟该方法。这样,默认构造函数将不会调用安装程序的实现,而是会调用覆盖的方法。
这是代码:
// src/author/MyClass.javapublic class MyClass {
public MyClass() {
setup();
}
protected void setup() {
throw new Exception("I hate unit testing !");
}
public boolean doesItWork() {
return true;
}
}
// test/author/MyClass.java
public class MyClassTest {
private class MockedMyClass extends MyClass {
@Override
protected void setup() {
}
}
private MyClass instance;
@Before
public void setUp() { // Not to be confusing with `MyClass#setup()`!
instance = new MockedMyClass();
}
@Test
public void test_doesItWork() {
assertTrue(instance.doesItWork());
}
}
如果您不希望MyTest的安装程序方法被测试以外的其他子类调用或覆盖(因为其他开发人员可能会通过使用安装程序方法将事情弄得很糟),只需将可见性更改为default即可,只有您的类才能呼叫设置。
如果有更简单的方法,请回答问题,因为我对解决方案不是100%满意。
以上是 Mockito Spy-调用构造函数之前的存根 的全部内容, 来源链接: utcz.com/qa/399287.html