2016-01-19 7 views
0

У меня есть метод, как это:Как издеваться над этим методом с помощью EasyMock и PowerMock?

public Object method() { 
    Object1 object1 = new Object1(); 
    return object2.someMethod(object1); 
} 

Теперь мое предположение издеваться это:

public void methodTest() { 
    Object1 object1 = EasyMock.createMock(Object1.class); 
    PowerMock.expectNew(Object1.class).andReturn(object1); 

    Object2 result = new Object2(); 
    EasyMock.expect(object.someMethod(object1)).andReturn(result); 
    EasyMockHelper.replayMocksFor(this); 
    result = myTestClass.method(); 
    EasyMockHelper.verifyMocksFor(this); 
} 

Я получаю сообщение об ошибке, где ожидать метод не совпадая с чем в настоящее время называется. Он ожидает, что класс объекта EasyMock объекта1 передается объекту object.someMethod(), но получает не высмеиваемый класс объекта1.

Надеюсь, что имеет смысл и благодарит вас за помощь.

Добавление некоторых пол реального кода:

public Object1 methodToTest(Object2 someParameter) { 
    Object3 object3 = new Object3(); 
    object3.setSomeMethod(EnumObject1.FOO); 
    return object4.getSometMethod(object5, someParameter, EnumObject2.BAR, object3).getSomeMethod(); 
} 

object4 и object5 оба авто проводных в классе.

+0

Не смешивать PowerMock и EasyMock – Jens

+0

приведенный выше код правильный? как вы получаете 'object2' в' method' и 'object' в' methodTest() '? – YoungHobbit

+0

object2 является autwired, а объект является переменной экземпляра в классе, который насмехается. –

ответ

0

Вы можете сделать это следующим образом:

EasyMock.expect(object.someMethod(EasyMock.isA(Object1.class)).andReturn(result); 

Это будет издеваться любого объекта типа Object1. Так что это сработает для вас.

В этом случае вам не нужно будет использовать код ниже:

Object1 object1 = EasyMock.createMock (Object1.class);
PowerMock.expectNew (Object1.class) .andReturn (object1);

+0

Итак, мой объект object.someMethod() фактически принимает 2 параметра, один из них - Object1.class, а другой - издевательский объект, и я получаю IllegalStateException, говорящий, что 2 ответвителя ожидаются, 1 записан. Если я включу оба параметра в сопоставления, я получаю исключение «Неожиданный вызов метода», когда параметры не совпадают с фактическим вызовом метода. –

+0

Чувак, он работает для меня. Повторите попытку, возможно, вы что-то пропустили. Или, пожалуйста, вставьте весь тестовый код. – proudandhonour

+0

Добавление некоторого обфускационного кода, который отражает логику –

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