2013-10-15 4 views
0

Выполняют ли все методы, которые не издеваются над издеваемым классом, работают нормально?EasyMock: Частично издевается над классом

E.G.

Учитывая объект

public class Shape { 
    public void createShape(...){ 
     .... 
    } 

    public void removeShape(...){ 
     .... 
    } 

    ... 
} 

, если это был осмеян, словно

shape = createMock(Shape.class, new Method[]{Shape.class.getMethod("removeShape", new Class[]{...})}); 

бы все другие методы, такие как createShape() работы или вы должны издеваться все методы, которые вы хотите использовать?

+1

Почему бы просто не попробовать? –

+0

Я пробовал что-то подобное, и это не похоже на то, как работают все остальные методы, но поскольку я только изучаю структуру easymock, не уверен, что это возможно сделать другим способом или если я сделал что-то неправильное в моем примере – flexinIT

ответ

4

Короче говоря, да.

Частичные Mocks работают точно так же, как экземпляр издевающегося класса, но у них есть возможность добавить ожидания для метода, который вы задали как насмешку. Это обычно полезно, если у вас есть переопределяющий метод, который также полагается на реализацию суперкласса этого метода.

Похоже, что ваш пример использует устаревший метод createMock (класс, метод ...), поэтому я приведу пример того, как вы должны создать частичный макет для вашего класса Shape.

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class); 
mockBuilder.addMockedMethod(Shape.class.getMethod("removeShape", new Class[]{...})); 
final Shape mockShape = mockBuilder.createMock(); 

Это обеспечит объект Shape, который ведет себя совершенно нормально, пока он не пытается использовать метод removeShape, где он будет требовать некоторые ожидания поведения.

Лично я очень редко использую версию addMockedMethod, которая принимает параметр Method. Обычно метод, который я издеваюсь, достаточно разный, чтобы использовать версию addMockedMethod (String). Поэтому я, скорее всего, воспользуюсь следующим:

final IMockBuilder<Shape> mockBuilder = EasyMock.createMockBuilder(Shape.class); 
mockBuilder.addMockedMethod("removeShape"); 
final Shape mockShape = mockBuilder.createMock(); 

Это немного чище для моих глаз и дает те же результаты.

Имейте в виду, что эти частичные макеты живут по тем же законам, что и полные макеты. Итак, вы не можете издеваться над такими окончательными методами.

Надеюсь, что Помогает

Смежные вопросы