Séb*_*nec 14 java generics unit-testing dao jpa
以本文中JpaDao定义的类的非常具体的示例为例:
public abstract class JpaDao<K, E> implements Dao<K, E> {
protected Class<E> entityClass;
@PersistenceContext
protected EntityManager entityManager;
public JpaDao() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
}
public void persist(E entity) { entityManager.persist(entity); }
public void remove(E entity) { entityManager.remove(entity); }
public E findById(K id) { return entityManager.find(entityClass, id); }
}
Run Code Online (Sandbox Code Playgroud)
最好是为应用程序中的所有现有实体(Order,CustomerBook等)编写单元测试,还是只为一个实体编写单元测试是可以接受的,正如另一个问题所暗示的那样?有关使用泛型的单元测试java类的最佳实践吗?
您可以为子类化的实体编写一个抽象测试类.
例如:
public abstract class JpaDaoTest<K,E> {
abstract protected E getEntity();
abstract protected JpaDao getDAO();
@Test
public void testPersistCreatesEntity()
{
JpaDao dao = getDAO();
dao.persist(getEntity());
// assert
}
}
Run Code Online (Sandbox Code Playgroud)
您通用类实现的契约应该能够像通用一样进行测试,假设getEntity()正确设置和关系依赖.
因此,通过为您的通用子类的所有测试用例继承此测试类,您可以免费获得测试.
| 归档时间: |
|
| 查看次数: |
8422 次 |
| 最近记录: |