[英]java.lang.IllegalStateException: no last call on a mock available with PowerMock and EasyMock
[英]EasyMock: Mock out a constructor call in java
我在此板上查看了類似的問題,但沒有一個回答我的問題。 這聽起來很奇怪,但是有可能在您要嘲笑的對象上模擬出構造函數調用。
例:
class RealGuy {
....
public void someMethod(Customer customer) {
Customer customer = new Customer(145);
}
}
class MyUnitTest() {
public Customer customerMock = createMock(Customer.class)
public void test1() {
//i can inject the mock object, but it's still calling the constuctor
realGuyobj.someMethod(customerMock);
//the constructor call for constructor makes database connections, and such.
}
}
我怎么期望構造函數調用? 我可以將Customer構造函數調用更改為使用newInstance,但是不確定是否有幫助。 我無法控制new Customer(145)
構造函數的主體。
這可能嗎?
您可以使用EasyMock 3.0及更高版本執行此操作。
Customer cust = createMockBuilder(Customer.class)
.withConstructor(int.class)
.withArgs(145)
.addMockedMethod("someMethod")
.createMock();
import static org.powermock.api.easymock.PowerMock.expectNew;
instance = new UsesNewToInstantiateClass();
expectNew(AnyOldClass.class).andReturn(anyClass);
這就是為什么要注入依賴項(通過Guice或類似軟件包)而不是在類內部創建依賴項的原因。
然后,您不必模擬它們的構造。
這假設(a)這是您可以更改的代碼,並且(b)所討論的對象足夠復雜,因此您應該注入它們。 在類中構造簡單對象很好,但是您不必模擬它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.