我尝试测试简单的类:
public class GenericDAO {
@Autowired
protected SessionFactory sessionFactory;
public <T> Serializable create(final T o) {
return sessionFactory.getCurrentSession().save(o);
}
@SuppressWarnings("unchecked")
public <T> T find(final Class<T> cl, final long id) {
return (T) sessionFactory.getCurrentSession().get(cl, id);
}
@SuppressWarnings("unchecked")
public <T> T update(final T o) {
return (T) sessionFactory.getCurrentSession().merge(o);
}
public <T> void delete(final T o) {
sessionFactory.getCurrentSession().delete(o);
}
@SuppressWarnings("unchecked")
public <T> List<T> getAll(final Class<T> cl) {
return (List<T>) sessionFactory.getCurrentSession()
.createCriteria(cl).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
}
}
在我的测试类中,我使用 @Before 创建会话并填充数据库进行测试,如下所示:
@Autowired
protected SessionFactory sessionFactory;
@Before
public void setUp() {
Session session = sessionFactory.getCurrentSession();
session.save(user);
session.save(user1);
session.save(user2);
session.flush();
// Otherwise the query returns the existing order
session.clear();
}
至于我最好使用@BeforeClass 来填充数据库,因为我只需要在上课开始时创建一次测试日期。但是这个方法必须是静态的,所以我不能自动装配 sessionFactory。那么什么是最好的解决方案呢?