У меня возникла проблема при попытке имитировать свойство службы из теста Junit:
@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);
}
}
Мокинг fooDao не имеет никакого эффекта, поскольку результат не является ожидаемым. Вот код службы и 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";
}
}
Как мы видим, реальная служба предназначена для возврата «foo», но тест имитирует dao, поэтому служба возвращает «var». Я знаю, что это связано с прокси-сервером CGLIB, но я не могу понять, как заставить его работать без использования установщика для свойства fooDao. Любая помощь будет оценена по достоинству.
Заранее с уважением и благодарностью.