java - 如何测试 EJB 中的异常

标签 java unit-testing jakarta-ee junit ejb

我正在我的应用程序中进行一些 junit 测试,并测试我的 EJB 中的验证方法。 我对数据何时通过进行了测试,并对方法何时抛出异常进行了测试。

这是我的同事:

@Test(expected = ValidationException.class)
public void testValidationError() {
    service.validateCsvFile(createCsvContents(false));
}

@Test        
public void testValidationOk() {
    service.validateCsvFile(createCsvContents(true));
}

这是我的方法:

@Override
public void validateCsvFile(List<CSVDataRow> csvContents) throws MyException {
    List<String> repeatedTransactionIds = new ArrayList<String>();
    Set<String> allTransactionIds = new HashSet<String>();
    for (CSVDataRow cSVDataRow : csvContents) {
        //performing a database size validation
        Validation<CSVDataRow> validation = Validator.validate(cSVDataRow);
        if (validation.hasViolations()){
            throw new ValidationException("Errors found for transactionId: " + cSVDataRow.getTransactionId(), validation.getErrorMessagesWithPropertyPath());
        }
        if (!allTransactionIds.add(cSVDataRow.getTransactionId())){
            repeatedTransactionIds.add(cSVDataRow.getTransactionId());
        }
    }

    if (!repeatedTransactionIds.isEmpty()){
        throw new ValidationException("Duplicated transactionIds found", repeatedTransactionIds.toString());
    }

}

testValidationError junit 未通过。 它向我抛出这个错误:

java.lang.Exception: Unexpected exception, expected<xxxxx.backend.exception.ValidationException> but was<javax.ejb.EJBException>
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)

最佳答案

默认情况下,当 EJB 方法内引发异常时,EJB 容器将用 EJBException 包装它。 。但是,您可以使用 ApplicationException 注释您的 EJB 方法。 ,这将告诉EJB容器直接抛出应用程序异常。

关于java - 如何测试 EJB 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26871881/

相关文章:

java - 如何在不将 null 作为输出的情况下打印 getter String?

java - hibernate "Provided id of the wrong type expected Long, got class DelayedPostInsertIdentifier"异常

c++ - 为客户端/服务器程序编写单元测试

java - 从大 WSDL 文件生成 Java 客户端

java - 使用配置类时 Spring Autowiring

java - Java-编译错误调试

java - 使用 EMMA 获取 ClassFormatError?

java - 如何简化测试?

java - 何时可以将应用程序视为 Java EE 应用程序

java - 在浏览器中打开PDF文件漏洞