Ich habe eine abstrakte GenericDAO mit gemeinsamen Methoden für alle Entitäten. Ich benutze Spring und Hibernate das Projekt. Der Quellcode des GenericDAO ist:Best Practice Test generische 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);
}
ich eine genericDAOTest Klasse erstellt habe, diese generischen Methoden zu testen und müssen sie nicht in jedem Testfall verschiedener Einheiten wiederholen, aber ich finde nicht den Weg tun Sie das. Gibt es eine Möglichkeit zu vermeiden, diese generischen Methoden in jeder Klasse zu testen? Vielen Dank!
Ich verwende DBUnit, um DAO-Klassen zu testen. Für testShouldSaveCorrectEntity
kann ich keine "Generische Entität" erstellen, da jede Entität keine Nullfelder hat, die ich festlegen muss. Also, ich denke, das ist unmöglich.
@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() {
}
}
Wahrscheinlich ist dies die beste Lösung. Vielen Dank! – angeldev