2015-11-23 2 views
0

Так Скажем, я некоторый класс определен:EasyMock конструктор со многими аргументами

MyClass { 
    private A _a; 
    private B _b; 
    private C _c; 

    MyClass(A a, B b, C c) { 
    _a = a; 
    _b = b; 
    _c = c; 
    } 

    public someMethodIDontCareAbout() { 
    _b.doSomething(); 
    _c.doSomething(); 
    } 

    public someMethodIWantToTest() { 
    _a.doSomething(); 
    } 
} 

Теперь, позволяет сказать, что я только хочу, чтобы проверить someMethodIWantToTest(), но я не забочусь о других методах. Я бы предпочёл не создавать новый объект MyClass и не издеваться над классами B и C. Конструктор требует их, но я не могу использовать их, так как мой метод, который я хочу проверить, использует только A.

Есть ли способ в простой макет, чтобы сказать EasyMock.createMockBuilder(MyClass.class).withConstructor(EasyMock.createNiceMock(A.class)).createMock();

Нет конструктора, который принимает только класс A, но это все, что я хочу. Нет ли простого способа сделать это без указания B и C? В идеале это создало бы niceMocks для всех других аргументов в конструкторе, которого я не хочу.

+2

Вы не можете использовать значения «null»? – Keppil

+0

Да, но если у вас есть весенние бобы, для конструктора может быть 30 аргументов, и это просто раздражает, чтобы выровнять все аргументы и поставить 28 нулей, когда мне нужно только 2 аргумента. Я надеялся на некоторую фантазию EasyMock. – REMOSEWA

ответ

1

Вам необходимо прочитать о том, как работает Mockito. Основная идея состоит в том, что он расширяет ваш класс и отменяет все методы и позволяет вам вернуть то, что вы хотите.

Синтаксис:

MyClass myClass = Mockito.mock(MyClass.class); 
Mockito.when(myClass.getMethod()).thenReturn(whatever); 

То же самое относится и к EasyMock.

MyClass myClass = EasyMock.createMock(MyClass.class); 
EasyMock.expect(myClass.getMethod).andReturn(whatever).times(1); 
1

На самом деле, если вы реорганизовывать конструктор принять в объекте Config вместо списка аргументов, то это было бы намного проще.

ie Если у вас есть объект Config с геттерами и сеттерами для A, B и C и просто передайте объект Config в конструктор, вы можете создать niceMock для объекта Config и просто высмеять метод get для getA() и вернуть ему любой объект, который вам нужен.

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