当前位置: 首页 > 知识库问答 >
问题:

无法通过hibernate的uniqueConstraintException的junit测试

鲜于河
2023-03-14

我有一个简单的user类,它有名字、姓氏和电子邮件我将电子邮件标记为

@Column(name="email",unique=true)
@NotNull
@Email
private String email;
@Test(expected = org.hibernate.exception.ConstraintViolationException.class)  
public void testUniqueEmail() throws DaoException{
    User uri = new User("uri","naor","a@b.com");
    userDao.saveUser(uri);
    //Session session = sessionFactory.getCurrentSession();
    //session.save(uri);
    //session.flush();  
    User clone = new User("clone","wars","a@b.com");
    userDao.saveUser(clone);
    //session.save(clone);
    //session.flush();
}

*编辑我的问题似乎不是很清楚我的模型有一个名为email的字段,它是唯一的,所以我希望当我插入一个具有相同email的对象时,DB应该拒绝它。

为了测试它,我做了一个简单的测试,用电子邮件“a@b.com”持久化一个对象,然后用相同的电子邮件创建另一个对象。问题出在JUNIT上,因为测试由于ConstraintViolationException而失败,正如预期的那样,但是测试是红色的。

共有1个答案

阮飞翔
2023-03-14

好的,所以我设法通过了测试,这里是代码片段,关键是捕获这个异常,清除会话,然后重新抛出它

@Test(expected = org.hibernate.exception.ConstraintViolationException.class)  
public void testUniqueEmail() throws DaoException{
    User uri = new User("uri","naor","a@b.com");
    userDao.saveUser(uri);
    User clone = new User("clone","wars","a@b.com");
    userDao.saveUser(clone);
    try{
        sessionFactory.getCurrentSession().flush();
    }catch(org.hibernate.exception.ConstraintViolationException ex){
        sessionFactory.getCurrentSession().clear();
        SQLException ex1= new SQLException();
        throw new ConstraintViolationException("Could not insert",ex1,"what else");
    }
}

希望这对某人有帮助

 类似资料:
  • 我有一个JUnit测试,它启动了我的spring boot应用程序(Application.java)。 如果我运行JUnit测试,应用程序可以成功启动,但是不能通过url访问 应用程序日志: 当我试图通过url访问应用程序时http://localhost:8080/process该网站称无法访问。

  • 我有一个名为dealDeck()的公共静态void方法,该方法从名为deck的ArrayList中获取对象,并根据它们在列表中的位置将它们分离并放置到4个不同的ArrayList中。是否有JUnit测试来检查方法是否按计划运行? 是否可以或应该测试此方法?

  • 我试图测试一个控制器的方法,并得到适当的异常。它仅对ConstraintViolationExcture(javax.validation)失败,而对其他测试(如MisSingServletRequest estParameterExcture或METHOArgumentTypeMismatchExcture)则按预期工作。 下面是我的代码的一部分,在控制器(@验证)中,在我添加这些注释的方法中。

  • 大家好,我需要为我的方法编写单元测试。我有点麻烦,因为我是JUnit的新手。我需要为这个方法写一个测试。这是我的方法 我试过了,但我被挡了,这是我的结果 附言:测试通过了,但我不明白我的测试是不是真的

  • 我在IntelliJ中打开了一个新的Java项目,用Maven作为构建工具,目前有一个类和一个JUnit5测试类。当我指示IntelliJ单独或一起运行测试时,它就可以工作了。但是当我转到终端并点击或从IntelliJ内的Maven窗格中执行相同操作时,它会跳过测试。 然而,与这个类似问题的提问者不同,我没有得到任何错误信息。测试类被找到并编译。我没有同样的问题(不正确的文件命名),他有。 它们是

  • 我想分析一个方法的执行时间和内存消耗是如何取决于方法的参数的。到目前为止,我已经想出通过JUnit测试该方法,并为不同的参数集运行几个测试(例如使用JUnit理论)。为了从设置测试等引起的开销中提取时间,在我感兴趣的步骤前后通过中的差值计算。这似乎有点怪,有没有更自然的方法来做这件事? 此外,我还想看看内存消耗在不同参数下的表现。我想到的是JVisualVM,但是有没有更优雅的方法来自动获得我想要