Estoy teniendo un problema cuando se trata de burlarse de una propiedad de un servicio desde el interior de una prueba Junit proxy:que imita una propiedad de un CGLIB servicio no trabaja
@ContextConfiguration("classpath:application-config.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class FooServiceTests {
@Autowired
private FooServiceImpl fooService;
@Test
public void testFoo() {
String str = fooService.foo();
assertEquals("Var", str);
}
@Before
public void mockFooDao() throws Exception {
FooDao mockFooDao = Mockito.mock(FooDao.class);
Mockito.when(mockFooDao.foo()).thenReturn("Var");
ReflectionTestUtils.setField(fooService, "fooDao", mockFooDao);
}
}
que imita fooDao no tiene ningún efecto ya que el resultado no es lo esperado Aquí está el código de ambos, el servicio y la DAO:
@Service("fooService")
public class FooServiceImpl implements FooService {
@Autowired
protected FooDao fooDao;
@Override
public String foo() {
return fooDao.foo();
}
}
@Repository
public class FooDaoImpl implements FooDao {
@Override
public String foo() {
return "foo";
}
}
Como podemos ver en el servicio real está destinado a volver "foo", pero la prueba se burla de la DAO por lo que el servicio devuelve "var". Sé que es una cuestión relacionada con el proxy CGLIB, pero no puedo encontrar la manera de hacerlo funcionar sin utilizar un setter para la propiedad fooDao. Cualquier ayuda sería apreciada.
Saludos y gracias de antemano.
Sí! ¡Funcionó! Muchas gracias Tomasz. – franDayz
@ frandiaz83: ¡me alegro de poder ayudar! Considere [aceptar] (http://meta.stackexchange.com/questions/5421) y/o vote la respuesta correcta para señalar a los lectores futuros a la solución adecuada. –
Sí, por supuesto. He aceptado la respuesta, pero no puedo votar porque no tengo suficiente reputación ... Gracias de nuevo. – franDayz