我听说它建议为每个DAO类创建独立的界面,以使其更容易进行测试。关于这个问题的答案"为什么?"关于是否有可能通过测试一替代原始DAO实现。但是没有关于如何做到这一点的信息。
所以,我对如何做到这一点感兴趣。
假设我们有简单的DAO接口:
public interface PersonDao {
void add();
...
}
以及简单的实施:
@Repository
public class PersonDaoImpl implements PersonDao {
public void add() {
// doing something
}
}
我们如何测试它:
public class PersonDaoTest {
@Autowire
FakePersonDao fakePersonDao;
@Test
public void addTest() {
fakePersonDao.add();
}
}
FakeDao
是第二个"测试" PersonDao
接口的实现:
public class FakePersonDaoImpl implements PersonDao {
public void add() {
// doing something different
}
}
HM?
我们应该将@Autowired
与@Qualifier
结合使用,还是更好的方式?
答案 0 :(得分:1)
当人们建议用模拟代替真正的DAO时,他们谈论的是测试使用DAO的图层。因此,如果您有服务层,则测试可能看起来像
public class MyServiceTest {
private MyServiceImpl objectUnderTest = new MyServiceImpl();
private PersonDao fakePersonDao;
@Before
public void setUp() {
fakePersonDao = new FakePersonDao(); // or define it using Mockito
objectUnderTest.setPersonDao(fakePersonDao);
}
}
通过这种方式,您可以使用需要测试的服务功能,而无需依赖于访问DAO封装的任何资源。