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プロパティのセッターを使用せずに機能させる方法を理解できません。どんな助けでも大歓迎です。
よろしくお願いします。