Spring DAO测试

时间:2015-09-11 19:05:18

标签: java spring testing dao

我听说它建议为每个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结合使用,还是更好的方式?

1 个答案:

答案 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封装的任何资源。