Могу ли я использовать jmock для замены реализации, возвращаемой фабрикой? - PullRequest
1 голос
/ 11 ноября 2008

У меня есть фабрика, которая возвращает интерфейс FormatService:

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

Можно ли смоделировать эту фабрику, чтобы она всегда возвращала реализацию заглушки FormatService - FormatServiceStub в наших модульных тестах?

Ответы [ 2 ]

1 голос
/ 11 ноября 2008

Зависит. Как фабрика получается / используется тестируемым кодом?

Если он явно создан в тестируемых вами методах или если это статическая фабрика, вы не сможете его смоделировать.

Если он вводится в тестируемый объект, вы можете создать и внедрить макет фабрики перед выполнением теста.

Дразнить фабрику должно быть достаточно просто с JMock. Из вашего примера кода выглядит, что это класс, а не интерфейс, поэтому вам нужно либо использовать версию jgock cglib и класс MockObjectTestCase в пакете cglib для JMock 1, либо ClassImposteriser для JMock 2.

После насмешки вы можете сделать так, чтобы он возвращал вашу заглушенную реализацию (или даже поддельный FormatService), когда определяете ожидания для метода getService ().

0 голосов
/ 21 января 2010

Насмешливый насмешливый = новый JUnit4Mockery () {{setImposteriser (ClassImposteriser.INSTANCE);}};

final FormatServiceFactory factory = mockery.mock (FormatServiceFactory .class);

context.checking (new Expectations () {{ oneOf (factory) .getService (); will (returnValue (new FormatServiceMock ())); }});

...