[英]Mockito - how to verify a method call made by an indirect private field object
我試圖驗證由間接私有字段對象進行的方法調用。 例如
要測試的代碼:
class A
{
final private B b;
public A(C c, D d)
{
this.b = new B(c,d);
}
public void methodToTest()
{
b.wantToVerifyThisIsCalled();
}
}
class B
{
private C c;
private D d;
public B(C c, D d)
{
this.c = c;
this.d = d;
}
...
public void wantToVerifyThisIsCalled()
{
//do stuff
return;
}
}
我想驗證運行A.methodToTest()時是否調用了b.wantToVerifyThisIsCalled()方法;
我試過這樣的東西,但這不起作用:
C c = mock(C.class);
D d = mock(D.class);
A a = new A(C,D);
B b = moc(B.class);
a.methodToTest();
verify(b).wantToVerifyThisIsCalled(); \\<-- This gives me error, wanted but not invoked
我該如何驗證A類的這個b字段對象確實正在進行該方法調用?
遺憾的是沒有setter方法,字段對象也被標記為final :(
謝謝
之所以發生這種情況,是因為調用了wantToVerifyThisIsCalled()
方法的B
類對象不是您的wantToVerifyThisIsCalled()
對象。 您應該將模擬對象注入A
如果你的A
類構造函數直接使用B
實例而不是C
和D
,並依賴它來創建B
類對象,那會更好。
嘗試修改您的類:
class A {
private final B b;
public A(B b) { this.b = b; }
public void methodToTest() {
b.wantToVerifyThisIsCalled();
}
}
class B {
private final C c;
private final D d;
public B(C c, D d) { this.c = c; this.d = d; }
public void wantToVerifyThisIsCalled() { ... }
}
然后像這樣測試:
C c = mock(C.class);
D d = mock(D.class);
B b = mock(B.class);// Find a way to set private fields (May be provide setters).
A a = new A(b);
a.methodToTest();
verify(b).wantToVerifyThisIsCalled();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.