Estoy usando EasyMock para crear el simulador que es uno de los parámetros privados (sin setter) en la clase probada. Intenté usar la reflexión, pero no funciona correctamente. informaciónCómo inyectar el simulacro de EasyMock en el campo privado de la clase probada
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);
}
}
Im consiguiendo FALLO:
Unexpected method call MockedClass.setDataType([email protected]):
MockedClass.getData(): expected: 1, actual: 0
junit.framework.AssertionFailedError:
Unexpected method call MockedClass.setDataType([email protected]):
MockedClass.getData(): expected: 1, actual: 0
Estoy seguro de que este método se dispara en el objeto "MockedClass" durante la prueba "instance.someAction()"
de cómo resolver este problema?
Editado - Respuesta: después de corregir duplicado replay.mocked()
encontré (tan simple!) Que un método más vacío debe ser declarada usando EasyMock.expectLastCall()
Corregido y teniendo problemas similares – Marcin
¿Está seguro de que el error es el mismo? – hvgotcodes
código editado y error, ¡gracias! – Marcin