我正在我的应用程序中进行一些 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/