java – 如何在使用EJBContainer时在jUnit中获取“真实”异常而
发布时间:2020-12-15 08:46:20 所属栏目:Java 来源:网络整理
导读:我正在我的 Java EE应用程序中设置单元测试.我正在使用JPA,JSF,Netbeans和Glassfish.它也是我的第一个真正的java应用程序,请原谅我,如果答案是明显的愚蠢! 该测试使用EJBContainer,访问实体并尝试输入空记录.然后它尝试输入一个用户名太短的记录.我想确认抛
我正在我的
Java EE应用程序中设置单元测试.我正在使用JPA,JSF,Netbeans和Glassfish.它也是我的第一个真正的java应用程序,请原谅我,如果答案是明显的愚蠢!
该测试使用EJBContainer,访问实体并尝试输入空记录.然后它尝试输入一个用户名太短的记录.我想确认抛出了正确的异常. 我可以添加@Test(expected = javax.ejb.EJBException.class),但这将捕获容器可能抛出的任何异常.如果它不是我想知道的预期异常. (与捕获一个多用途的例外哲学相同,最佳实践是捕获特定的例外) 以下测试有助于说明: //@Test(expected=javax.validation.ConstraintViolationException.class) @Test(expected=javax.ejb.EJBException.class) public void testCreate() throws Exception { EJBContainer container = getContainer();//pull singleton container AgentsFacade instance = (AgentsFacade) container.getContext().lookup("java:global/classes/AgentsFacade"); Agents badAgent = new Agents(); instance.create(badAgent);//null username //Short username Agents shortUsername = new Agents("srtnm"); instance.create(shortUsername);//must be > 6 in length } 以下是Agents实体的“username”属性的注释: ... @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(unique=true) @Size(min=6,max=40) @NotNull private String username; ... 如您所见,两个测试都应抛出javax.validation.ConstraintViolationException或其他一些异常.我可以在EJBException中的调试信息中看到它们.我不确定是否有办法“提取”正确的例外情况? 最后,我是一个总菜鸟.因此,如果我在错误的道路上徒步旅行,请告诉我. 谢谢. –Update– 回应斯蒂芬,这是我想出的结果. try { //Null username Agents badAgent = new Agents(); instance.create(badAgent); fail("NULL agent added!");//should never reach this point. } catch (EJBException e) { Exception causedByException = e.getCausedByException(); if(!(causedByException instanceof javax.validation.ConstraintViolationException)){ fail("ConstraintViolationException wasn't thrown."); } } 解决方法
您必须在单元测试中显式捕获EJBException,调用getCause()以提取真实异常,然后根据需要对其进行测试.
(这是您测试在版本3 JUnit测试中引发正确异常的方式.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |