gpt4 book ai didi

java - 测试使用 JPA 实现的 DAO 类

转载 作者:行者123 更新时间:2023-11-30 05:03:15 25 4
gpt4 key购买 nike

我在 Java EE Web 项目中实现的 DAO 类之一位于

@Repository("ClientsimpleDAO")
public class ClientsimpleDAOImp implements ClientsimpleDAO {
private static final Log log = LogFactory.getLog(ClientsimpleDAOImp.class);
@PersistenceContext
EntityManager em;
@Override
public void delete(Clientsimple clientsimple) {
// TODO Auto-generated method stub
log.debug("removing clientsimple");
try{
em.remove(clientsimple);
log.debug("clientsimple removed");
}
catch(RuntimeException re){
log.error("clientsimple remove failure"+re);
}

}

@SuppressWarnings("unchecked")
@Override
public List<Clientsimple> findByEntreprise(String entreprise) {
// TODO Auto-generated method stub
log.debug("list Cli By entreprise");
try{
Query q =em.createQuery("SELECT cli from Clientsimple cli where cli.entreprise= :entreprise");
q.setParameter(entreprise,entreprise);
List<Clientsimple> cli= (List<Clientsimple>) q.getSingleResult();
return cli;
}catch(RuntimeException re){
log.error(re);
return null;
}
}

@SuppressWarnings("unchecked")
@Override
public List<Clientsimple> findByNom(String nom) {
// TODO Auto-generated method stub
log.debug("list Cli By nom");
try{
Query q =em.createQuery("SELECT cli from Clientsimple cli where cli.nom= :nom");
q.setParameter(nom,nom);
List<Clientsimple> cli= (List<Clientsimple>) q.getSingleResult();
return cli;
}catch(RuntimeException re){
log.error(re);
return null;
}
}

@SuppressWarnings("unchecked")
@Override
public List<Clientsimple> findByPrenom(String prenom) {
// TODO Auto-generated method stub
log.debug("list Cli By prenom");
try{
Query q =em.createQuery("SELECT cli from Clientsimple cli where cli.prenom= :prenom");
q.setParameter(prenom,prenom);
List<Clientsimple> cli= (List<Clientsimple>) q.getSingleResult();
return cli;
}catch(RuntimeException re){
log.error(re);
return null;
}
}

@SuppressWarnings("unchecked")
@Override
public List<Clientsimple> findByRegion(String region) {
// TODO Auto-generated method stub
log.debug("list Cli By region");
try{
Query q =em.createQuery("SELECT cli from Clientsimple cli where cli.regioncli= :region");
q.setParameter(region,region);
List<Clientsimple> cli= (List<Clientsimple>) q.getSingleResult();
return cli;
}catch(RuntimeException re){
log.error(re);
return null;
}
}

@SuppressWarnings("unchecked")
@Override
public List<Clientsimple> getALL() {
// TODO Auto-generated method stub
log.debug("list ALL Cli");
try{
Query q =em.createQuery("SELECT cli from Clientsimple cli");
List<Clientsimple> cli= (List<Clientsimple>) q.getSingleResult();
return cli;
}catch(RuntimeException re){
log.error(re);
return null;
}
}

@Override
public void save(Clientsimple clientsimple) {
// TODO Auto-generated method stub
log.debug("save clientsimple");
try{
em.persist(clientsimple);
log.debug("clientsimple saved");
}
catch(RuntimeException re){
log.error("clientsimple saving failure"+re);
}
}

@Override
public void update(Clientsimple clientsimple) {
// TODO Auto-generated method stub
log.debug("update clientsimple");
try{
em.merge(clientsimple);
log.debug("clientsimple merged");
}
catch(RuntimeException re){
log.error("clientsimple merging failure"+re);
}

}

}

所以,我不知道如何测试这个 dao 或其他 dao?

我创建了一个主类来测试它,但它给了我一个错误(请参阅它下面的图像包含代码和控制台中的错误)。 enter image description here


下图显示了我的项目层次结构(使用的技术为flex、spring、jpa、hibernate);
enter image description here

最佳答案

不要使用主类进行测试,使用 Spring 的测试框架。请阅读 9.3 Integration testing 部分了解相关内容。 .

让您的 Test 类继承描述的 Spring 支持类之一 here ,例如AbstractTransactionalJUnit4SpringContextTests ,添加上下文配置和一些依赖项并进行一些测试。足够简单。

@ContextConfiguration("classpath:path/to/your/spring/context.xml")
public class YourServiceTest extends
AbstractTransactionalJUnit4SpringContextTests{

@Autowired
private YourDaoInterfaceHere dao;

// method is automatically transactional
@Test
public void testSomething(){
dao.persist(someData);
dao.load(someOtherData);
}
}

关键是

  • 解耦您的 spring 上下文(dao 测试将引用 daoContext.xml,但不是 everythingContext.xml)
  • 使用 PropertyPlaceHolderConfigurerPropertyOverrideConfigurer 机制在测试和生产中使用不同的环境
<小时/>

作为旁注:

catch(RuntimeException re){
log.error("clientsimple remove failure"+re);
}

您永远不应该记录这样的异常。您正在丢失堆栈跟踪。始终使用 log.error(message, throwable) 版本。

关于java - 测试使用 JPA 实现的 DAO 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5949743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com