У меня есть абстрактный GenericDAO с общими методами для всех сущностей. Я использую Spring и Hibernate проекта. Исходный код GenericDAO является:Общепринятая практика тестирования DAO
public abstract class GenericDAOImpl <T, PK extends Serializable> implements GenericDAO<T, PK> {
private SessionFactory sessionFactory;
/** Domain class the DAO instance will be responsible for */
private Class<T> type;
@SuppressWarnings("unchecked")
public GenericDAOImpl() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
type = (Class<T>) pt.getActualTypeArguments()[0];
}
@SuppressWarnings("unchecked")
public PK create(T o) {
return (PK) getSession().save(o);
}
public T read(PK id) {
return (T) getSession().get(type, id);
}
public void update(T o) {
getSession().update(o);
}
public void delete(T o) {
getSession().delete(o);
}
Я создал класс genericDAOTest, чтобы проверить эти общие методы и не повторять их в каждом тесте различных объектов, но я не нашел способ сделать это. Есть ли способ избежать тестирования этих общих методов в каждом классе? Благодаря!
Я использую DBUnit для тестирования классов DAO. Для testShouldSaveCorrectEntity
Я не могу создать «Generic Entity», потому что у каждого объекта нет нулевых полей, которые я должен установить. Поэтому я думаю, что это невозможно сделать.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/com//spring/dao-app-ctx-test.xml")
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
TransactionDbUnitTestExecutionListener.class})
@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public abstract class GenericDAOTest<T, PK extends Serializable> {
protected GenericDAO<T, PK> genericDAO;
public abstract GenericDAO<T, PK> makeGenericDAO();
@Test
@SuppressWarnings("unchecked")
public void testShouldGetEntityWithPK1() {
/* If in the future exists a class with a PK different than Long,
create a conditional depending on class type */
Long pk = 1l;
T entity = genericDAO.read((PK) pk);
assertNotNull(entity);
}
@Test
public void testShouldSaveCorrectEntity() {
}
}
Возможно, это лучшее решение. Благодаря! – angeldev