2010-09-11 54 views
6

比方說,我有一個類對於Mockito間諜來說這是正確的嗎?

class SomeClass 
{ 
    public void methodA() 
    {} 

    public void methodB() 
    {} 

    public void someMethod() 
    { 
    methodA(); 
    methodB(); 
    } 
} 

我想考的someMethod()與的的Mockito行爲。

我能想到的唯一方法是使用間諜();

喜歡的東西

SomeClass someClass = spy(new SomeClass()); 
someClass.someMethod(); 
InOrder inOrder = inOrder(someClass); 
inOrder.verify(someClass).methodA(); 
inOrder.verify(someClass).methodB(); 

我是新來的及的Mockito文檔說

「真正的間諜應該小心,偶爾與遺留代碼打交道時使用,例如」。

所以,也許我錯過了一些東西,並有更好的(正確)方法來驗證methodA和methodB被調用時沒有明確地在測試用例中調用它們。

謝謝。

回答

6

是的,spy()是適合您的目的。警告是由於真實方法被調用的事實,因此您可能會得到意想不到的結果(例如 - 真錢從銀行帳戶中提取)

-1

如果您的代碼需要間諜進行單元測試 - 出錯了。 間諜是代碼異味的第一個標誌。 你有兩個選擇,以避免它在你的榜樣:

  1. ,則可以避免嘲諷方法之一,並測試整個的someMethod。
  2. 如果methodA和methodB確實需要嘲弄 - 可以將它們移動到不同的類別等。
相關問題