繁体   English   中英

如何在EJB中测试异常

[英]How to test an exception in a 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容器直接引发应用程序异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM