2008-11-10 52 views
1

我有一個工廠,返回一個接口FormatService我可以使用jmock替換工廠返回的實現嗎?

public class FormatServiceFactory { 
    public FormatService getService() { 
     ... 
    } 
} 

是否可以模擬出這家工廠,以便它總是返回的FormatService一個存根實現 - 在我們的單元測試FormatServiceStub

回答

1

取決於。工廠如何獲得/使用被測試的代碼?

如果它在您正在測試的方法中顯式實例化,或者它是靜態工廠,那麼您將無法嘲笑它。

如果它被注入到被測對象中,您可以在執行測試之前創建並注入模擬工廠。

用JMock嘲笑工廠應該很容易。從您的示例代碼看,它看起來像是一個類,而不是接口,因此您需要使用cglib版本的JMock和用於JMock 1的cglib包中的MockObjectTestCase類,或者用於JMock 2的ClassImposteriser

一旦被嘲笑,當你定義getService()方法的期望時,你可以讓它返回你的stubbed實現(甚至是一個mock FormatService)。

0

Mockery mockery = new JUnit4Mockery(){{setImposteriser(ClassImposteriser.INSTANCE);}};

final FormatServiceFactory factory = mockery.mock(FormatServiceFactory.class); (new)期望值(){{ oneOf(factory).getService(); will(returnValue(new FormatServiceMock())); }});

相關問題