Mockito Spy-调用构造函数之前的存根

我试图监视一个对象,并且想在构造函数调用它之前对构造函数调用的方法进行存根。

我的课看起来像这样:

public class MyClass {

public MyClass() {

setup();

}

public void setup() {

}

}

不能调用setup方法。好吧,我如何监视这种方法(以及存根设置,使其什么也不做)?

模拟方法可以很好地工作,但是我想进行单元测试MyClass,因此我将需要其他方法。


之所以需要对设置方法进行打桩以使其无能为力的原因:

我正在对Lego机器人(lejos)进行编程,并在设置中放入了一些代码,该代码需要该机器人能够工作。但是,当我在TinyVM(安装在机器人上的VM)之外调用它时,java崩溃了,因为尚未正确初始化VM(因为测试是在我的PC上运行的)。对于单元测试,设置并不重要。

我无法对类/方法设置调用进行存根处理,因为其中一些是公共静态最终变量。

回答:

感谢您的建议,但这有点太复杂了。

最后,我通过扩展类并覆盖我的设置方法来模拟该方法。这样,默认构造函数将不会调用安装程序的实现,而是会调用覆盖的方法。

这是代码:

// src/author/MyClass.java

public 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

回到顶部