我一直在寻找一种优化的方法来为DAO层(Java,Spring,Hibernate)创建集成测试,主要针对通用CRUD操作(readAll(),getById(),insert(),update(),delete()等。 ),几个月。到目前为止,我发现的任何一种方法都是1)太费力的方法,其代码量与真实源代码相当或2)太复杂/不可读/不灵活的方法。
我迄今为止进行的一项尝试如下:
如果我们说像这样的通用DAO接口:
public interface GenericDAO {
Long insert(T t);
void update(T t);
List getAll();
T getById(Long id);
void delete(T t);
}然后我们可以提出一些模板方法(因为所有的测试都是默认随机执行的)来执行所有那些适用于每个类的CRUD操作:
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/test-context.xml"})
public abstract class AbstractDAOTest {
@Test
public void test() {
insert();
read();
readAll();
update();
delete();
}
protected abstract void insert();
protected abstract void read();
protected abstract void readAll();
protected abstract void update();
protected abstract void delete();}
然后,我们通过Spring的测试配置和样本数据,并在真正的继承者中实现所有这些方法。
这对我仍然不好。 (只有一种实际的测试方法需要耗费时间来创建测试环境等)
那么,为DAO层创建集成测试的最容易识别和友好的方法是什么?先谢谢你。