我在尝试从 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 属性的设置器的情况下使其工作。任何帮助,将不胜感激。
提前致以问候和感谢。