Я настраиваю модульный тест в своем приложении 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
}
Вот аннотации для свойства username объекта Agents:
...
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique=true)
@Size(min=6, max=40)
@NotNull
private String username;
...
Как видите, оба теста должны генерировать либо javax.validation.ConstraintViolationException, либо какое-то другое исключение. Я вижу их в отладочной информации в EJBException. Я не уверен, есть ли способ «извлечь» правильные исключения?
Наконец, я полный нуб. Так что, если я иду по неправильному пути, дайте мне знать.
Спасибо.
- Обновление -
В ответ на Стивена вот результат, который я придумал.
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.");
}
}