[英]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.