Имитация свойства прокси-службы CGLIB не работает

У меня возникла проблема при попытке имитировать свойство службы из теста 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. Любая помощь будет оценена по достоинству.

Заранее с уважением и благодарностью.

17
задан franDayz 27 January 2012 в 13:24
поделиться