簡體   English   中英

在Mockito中如何在間諜對象條件下調用真實方法?

[英]How to call real method on condition of spied object in Mockito?

我需要能夠根據某種條件調用間諜對象的真實方法。 即,如果條件為true,則調用real方法,否則執行其他操作。

為了清楚起見,我需要在第一次調用時引發異常,並在第二次調用時調用real方法。 使用Mockito是否可以實現?

Object object = Mockito.spy(new Object());

// On the first call I need to throw an exception like this
Mockito.doThrow(RuntimeException.class).when(object).toString();

// On the second call I need to call a real method
Mockito.doCallRealMethod().when(object).toString();

容易,使用when(...).then(...) ,因為它允許模擬規范的“流暢鏈接”:

Object object = Mockito.spy(new Object());
Mockito.when(object.toString()).thenThrow(new RuntimeException()).thenReturn("yeha");

try {
  System.out.println(object.toString());
  fail();
} catch(RuntimeException r) {
  System.out.println(object.toString());
}

打印:

YEHA

耶哈!

認真地說:無論如何,您應該更喜歡when(mock.foo()).then... (請參閱此處,了解為什么這樣做的原因)。 在某些情況下,需要使用doReturn().when() ,但是doReturn().when() :這是您的最后選擇,而不是您的第一選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM