2017-09-12 123 views
1

我試圖存根一個特定的類的實例方法,所以當這個Foo類的任何實例調用這個實例方法doSomething,則返回相同object一類的所有實例模擬實例方法(見代碼如下)。但是,mockito不允許任何驗證或驗證之外的匹配器。的Mockito:爲

Bar object = new Bar(); 
given(any(Foo.class).doSomething(Arg.class)).willReturn(object); 

而且在Foo.class

Bar doSomething(Arg param) { 
    Bar bar = new Bar(); 
    // Do something with bar 
    return bar; 
} 

什麼辦法可以實現與此的Mockito目標?謝謝!

+0

很好的解決方案沒有骯髒的hackarounds將是一個'boolean'參數返回相同的值的私有方法。然後你的公共方法會叫那個(因爲你試圖尋找一個自己的來電者)。除此之外,你正在閱讀堆棧。 – Rogue

回答

2

這應該工作:

public class FooTest { 
    @Mock 
    private Foo foo; 

    ... 
    @Before 
    public void setUp() { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void testSomething() { 
     Bar object = new Bar(); 
     when(foo.doSomething(any(Any.class))).thenReturn(object); 
     ... 
    } 
} 
+0

一個好的開始 - 很好,你在我的答案中爲概念解釋留下了一些空間;-) – GhostCat

-1

看來你越來越嘲諷/單元測試是錯誤的。

力爭最大限度地減少嘲笑的使用到絕對最低限度。換句話說:您專注於創建可測試的設計 - 然後您想要編寫特定個案的單元測試。

只能指定一個具體嘲笑的Foo實例的行爲(如在對方的回答正確列出)。並且應該足夠了:因爲您只需確保您的測試代碼在所有需要嘲笑的地方都使用嘲諷。

換句話說:您改變行爲的想法全部Foo類的實例根本無法實現。更糟的是 - 它不會讓感覺