2008-11-10 5 views
1

У меня есть завод, который возвращает интерфейс FormatService:Могу ли я использовать jmock для замены реализации, возвращенной фабрикой?

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

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

ответ

1

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

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

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

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

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

0

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

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

context.checking (новые ожидания() {{ oneOf (завод) .getService(); будет (ReturnValue (новый FormatServiceMock()));}} );