Как внедрить макет EasyMock в приватное поле тестируемого класса

Я использую EasyMock для создания макета, который является одним из частных параметров (без установщика) в тестируемом классе. Пробовал использовать отражение, но работает некорректно.

public class TestedClassTest{
    @Test
    public void test(){
      TestedClass instance = new TestedClass();
      MockedClass mocked = EasyMock.createMock(MockedClass.class);
      Data data = new Data();

      //Void setter
      DataType dataType = (myDataType.DataType) EasyMock.anyObject();
      mocked.setDataType(dataType);
      EasyMock.expectLastCall();

      //expect
      EasyMock.expect(mocked.getData()).andReturn(data);
      EasyMock.replay(mocked);

      Field field = instance.getClass().getDeclaredField("mockedClass")
      field.setAccessible(true);
      field.set(instance, mocked);

      //run tested method
      instance.someAction();

      EasyMock.verify(mocked);
   }
}

Я получаю информацию FAILED:

Unexpected method call MockedClass.setDataType(myData.MyData@104306d75):
MockedClass.getData(): expected: 1, actual: 0
junit.framework.AssertionFailedError: 
Unexpected method call MockedClass.setDataType(myData.MyData@132006d75):
MockedClass.getData(): expected: 1, actual: 0

Я уверен, что этот метод запускается для объекта «MockedClass» во время тестирования «instance.someAction()»

Как решить эту проблему?

Отредактировано - Ответ: После исправления удвоенного replay.mocked()я обнаружил (так просто!), что еще один метод void должен быть объявлен с помощью EasyMock.expectLastCall()

5
задан Marcin 4 April 2012 в 14:18
поделиться