[英]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.