我听说建议为每个 DAO 类创建单独的接口(interface),以使其更容易测试。对“为什么”这个问题的回答是关于通过测试一替换原始 DAO 实现的可能性。但没有关于如何做到这一点的信息。
所以,我对如何做到这一点很感兴趣。
假设我们有简单的 DAO 接口(interface):
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
接口(interface)的第二个“测试”实现:
public class FakePersonDaoImpl implements PersonDao {
public void add() {
// doing something different
}
}
嗯?
我们应该在所有地方使用 @Autowired
并结合 @Qualifier
还是有更好的方法?
最佳答案
当人们建议用模拟代替真正的 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 封装的任何资源。
关于java - Spring DAO 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530491/