私は単純なクラスをテストしようとしています:
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 を使用して db を埋める方が良いです。これは、クラスの開始時にテスト日を 1 回だけ作成する必要があるためです。ただし、このメソッドは静的でなければならないため、sessionFactory をオートワイヤーできません。それで、これに対する最善の解決策は何ですか?