Я пытаюсь сделать тест исключения JUnit для метода десортировки.
Это мой метод неупорядочения (примечание: я возвращаю строку из-за обычного тестирования неупорядоченного тестирования с ожидаемой строкой).
public String UnMarshalling(String FILE)
{
ArrayList<Player> playerList = new ArrayList<Player>();
try {
JAXBContext context = JAXBContext.newInstance(Match.class);
Unmarshaller um = context.createUnmarshaller();
Match Match2 = (Match) um.unmarshal(new InputStreamReader(new FileInputStream(FILE), StandardCharsets.UTF_8));
playerList = Match2.playerList;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
return playerList.toString();
}
Вот тесты для этого метода.
@Test
public void unMarshallingTest() {
assertTrue(marshalling.UnMarshalling(matchxml).contains("Petras"));
}
@Test(expected=JAXBException.class)
public void marshallingTestException()
{
marshalling.UnMarshalling(matchbrokenxml);
}
Чего я пытаюсь добиться, так это отправить сломанный xml, например, с неправильной версией xml и получить JAXBException.
До сих пор я искал в Интернете пример, но ничего не нашел. Любые предложения о том, как этого добиться?
файл xml пуст, и я получаю javax.xml.bind.UnmarshalException
Итак, я должен изменить ожидаемое исключение на UnmarshalException?
Есть еще 20 исключений, связанных с этим unmarshaException.
Как мне выбросить это исключение? @glytching
Итак, я думаю, что я мог бы это сделать. Спасибо за помощь, ребята!




Вы ловите и проглатываете исключение, т.е. UnMarshalling() никогда не выдает JAXBException (или любой его подкласс).
Это будет работать:
public String UnMarshalling(String FILE) throws JAXBException {
ArrayList<Player> playerList = new ArrayList<Player>();
try {
JAXBContext context = JAXBContext.newInstance(Match.class);
Unmarshaller um = context.createUnmarshaller();
Match Match2 = (Match) um.unmarshal(new InputStreamReader(new FileInputStream(FILE), StandardCharsets.UTF_8));
playerList = Match2.playerList;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return playerList.toString();
}
@Test(expected=UnmarshalException.class)
public void marshallingTestException() {
marshalling.UnMarshalling(matchbrokenxml);
}
Основное изменение здесь — удаление предложения catch для JAXBException и добавление throws JAXBException в объявление метода.
Ваш тест сильно предполагает, что JAXBException является частью общедоступного API для этого метода, и в этом случае имеет смысл объявить метод для выбрасывания JAXBEception. С другой стороны, если вы действительно не хотите или не нуждаетесь в JAXBException в сигнатуре метода, тогда ваш тестовый пример либо избыточен, либо обращается к неправильному типу исключения.
Итак, вы не получаете ожидаемое исключение? Если
matchbrokenxmlуказывает на файл, содержащий мусор, я ожидаю, что это сработает. Каково содержимое вашего файла?