2013-02-03 70 views
0

當我使用Mockito編寫單元測試時,我經常會發現我在我的一個注入模擬中調用了一個getter,然後從返回的對象中調用一個方法。在Mockito中連續進行兩次方法調用時會發生什麼?

到目前爲止,我已經做了這樣的事情:

@Mock 
    private Randomizer r; 
    @Mock 
    private Random random; 
    @InjectMocks 
    private NodeGenerator ng = new NodeGenerator(); 

    @Test 
    public void nodeIsDuplicate() { 

     when(r.getRandom()).thenReturn(random); 
     when(random.nextInt(2)).thenReturn(1); 
     [...] 
    } 

但似乎這樣的浪費有模擬出隨機併成立了第二個它的時候。是否有某種方式讓我發言的時候更喜歡:

when(r.getRandom().nextInt(2)).thenReturn(1); 

而不必嘲笑了隨機的,所以我可以只是我的隨機數發生器模擬做的這一切在同一行?

+2

http://stackoverflow.com/questions/7926891/mock-or-stub-for-chained-call –

回答

4

你想要Mockito的One liner stubs

編輯:

經仔細檢查,可能不是你要找什麼,但它可以減少一些該鍋爐板代碼爲您服務。

笏你正在尋找的是,正如評論所示,deep stubs

對於您的例子那就是:

Randomizer randomizer = mock(Randomizer.class, RETURNS_DEEP_STUBS); 

when(randomizer.getRandom().nextInt(2)).thenReturn(1); 
+0

啊,我只是想通了基於關閉評論的鏈接。實際上,我需要做的就是添加:@Mock(answer = Answers.RETURNS_DEEP_STUBS)用於註釋,它神奇地工作!很酷。 – CorayThan

+0

請注意違反德米特定律的警示性警告。 – bowmore

+0

感謝您的建議。但這只是一個個人項目,所以我有時會忽略一些OO設計原則,如果我是爲工作編碼的話,我會遵循這些原則。 – CorayThan

相關問題