我有一个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
,那么事情就会起作用(我认为这与EasyMock无法模拟final
方法有关)但我希望能够调用{ {1}}没有这样做。
有没有办法使用EasyMock创建一个模拟对象,允许我调用我的非baz()
方法?
我目前使用的一种解决方法是:
abstract
但这太丑了。
答案 0 :(得分:0)
所以我找到了解决问题的方法。您可以在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
。