[英]createMock and non-abstract methods in an abstract class
我有一个abstract
类,我想模拟一下以进行测试:
public abstract class Foo {
public abstract void bar();
public void baz() {
System.out.print("Hi from baz!");
}
}
如果我使用easyMock Foo mock = createNiceMock(Foo.class)
,然后调用mock.baz()
,则会得到java.lang.NullPointerException
。 如果我将baz()
更改为final
,那么事情将baz()
进行(我认为这与EasyMock无法模拟final
方法有关),但是我希望能够不这样做而调用baz()
。
有没有一种使用EasyMock创建模拟对象的方法,该方法允许我调用非abstract
方法?
我当前使用的一种解决方法是:
Foo mock = new Foo() {
@Override
public void bar() {
return;
}
}
但这太丑了。
因此,我找到了解决问题的方法。 您可以在EasyMock中创建部分模拟:
Foo mock = EasyMock.createMockBuilder(Foo.class)
.addMockedMethod("bar")
.createNiceMock();
需要注意的是,如果类具有实例变量,因为您不使用new
它们不会被初始化! 如果有人在这方面有解决方法,那将很有用。 那就是为这个类创建一个局部的:
public abstract class Foo {
public double myInstanceVariable = 2;
public abstract void bar();
public void baz() {
System.out.print("Hi from baz!");
}
}
在可能的地方调用mock.myInstanceVariable
并获取2
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.