Похоже, что System.setOut()
не работает в этом тестовом примере.Java - System.setOut не сохраняет сообщение об ошибке
Описание проблемы.
test0
выполняетSystem.setOut(new PrintStream(byteBuffer))
, так что он сохраняет стандартный выход.test0
вызываетAddChild1_wy_v1.main
.- В
AddChild1_wy_v1.main
,xml.addChild(null)
генерирует сообщение об исключении. - Сообщение об исключении должно быть сохранено в
byteBuffer
, но, похоже, это не так. JVM останавливает запуск тестового примера после появления сообщения об ошибке. Остальные коды послеAddChild1_wy_v1.main
не выполняются.
Есть ли способ для jvm выполнить оставшийся код в test0
?
NanoAddChild1_wy_v1Tests.java
package tests;
import junit.framework.TestCase;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import net.n3.nanoxml.*;
public class NanoAddChild1_wy_v1Tests extends TestCase {
public void test0() throws Exception { //addchild1.out
String result;
ByteArrayOutputStream byteBuffer;
byteBuffer = new ByteArrayOutputStream();
System.setOut(new PrintStream(byteBuffer));
AddChild1_wy_v1.main(new String[] {"/home/junghyun/Dev/nanoxml/inputs/simple.xml"});
result = new String(byteBuffer.toByteArray());
assertEquals(result, "Exception in thread \"main\" java.lang.IllegalArgumentException: child must not be null\n\tat net.n3.nanoxml.XMLElement.addChild(XMLElement.java:165)\n\tat AddChild1_wy_v1.main(AddChild1_wy_v1.java:47)\n");
}
}
AddChild1_wy_v1.java
package tests;
import net.n3.nanoxml.IXMLParser;
import net.n3.nanoxml.IXMLReader;
import net.n3.nanoxml.StdXMLReader;
import net.n3.nanoxml.XMLElement;
import net.n3.nanoxml.XMLParserFactory;
import net.n3.nanoxml.XMLWriter;
public class AddChild1_wy_v1
{
public static void main(String args[])
throws Exception
{
if (args.length == 0) {
System.err.println("Usage: java DumpXML file.xml");
Runtime.getRuntime().exit(1);
}
IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
IXMLReader reader = StdXMLReader.fileReader(args[0]);
parser.setReader(reader);
XMLElement xml = (XMLElement) parser.parse();
xml.addChild (null);
(new XMLWriter(System.out)).write(xml);
}
}
пожалуйста Почтовый код в виде текста, таким образом можно скопировать и вставить его в ответ. Изображение не так хорошо. –
Прошу прощения. Я закончил редактирование. –
отлично! Теперь я использовал ваш код в своем ответе. Я также отредактировал ваш вопрос так, как ожидается здесь, на SO. –