2013-01-23 81 views
2

我有一個間接使用類Foo的測試用例。我不在乎Foo是用於測試用例的目的。我應該可以嘲笑它。如何使用EasyMock創建「深」模擬

Foo mock = EasyMock.createMock(Foo.class); 

但是,測試用例使用一個庫調用Foo上的幾個方法。其中一些方法返回對象,然後這個庫在這些返回的對象上調用幾個方法。對於這個測試來說,這些對象是什麼並不重要,只是它們不是null而且不會導致NullPointerException。

我一直在經歷和加入的期望呼叫一大堆類似下面的每個對象和方法,這個庫調用:

Bar bar = EasyMock.createMock(Bar.class); 
Baz baz = EasyMock.createMock(Baz.class); 
EasyMock.expect(mock.getBar()).andReturn(bar).anyTimes(); 
EasyMock.expect(bar.getBaz()).andReturn(baz).anyTimes(); 

基本上,只是一遍又一遍地對任何的期望創造這個庫最終調用的方法。

同樣,對於我的測試目的來說,對象本身並不重要。大多數情況下,庫只需要它們非空。

有沒有辦法讓這個自動化?我想要的是某種「深度模擬」功能,我可以告訴EasyMock自動返回通過模擬對象獲得的任何對象的模擬對象。

回答

1

事實證明了的Mockito內置此功能:

Foo mock = Mockito.mock(Foo.class, Mockito.RETURNS_DEEP_STUBS); 
相關問題