0

System.setOut()このテストケースではうまくいかないようです。

ここに問題の説明があります。

  1. test0System.setOut(new PrintStream(byteBuffer))標準出力を保存するように実行されます。
  2. test0を呼び出しますAddChild1_wy_v1.main
  3. ではAddChild1_wy_v1.mainxml.addChild(null)例外メッセージが生成されます。
  4. 例外メッセージは に保存する必要があります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); 
    }

}

ここに画像の説明を入力

4

3 に答える 3

3

3 つのデフォルト ストリームがあります。

System.in : InputStream
System.out :PrintStream
System.err :PrintStream

したがって、それぞれを設定するには、3 つの方法があります。

public static void setIn(InputStream in) {...}
public static void setOut(PrintStream out) {...}
public static void setErr(PrintStream err) {...}

設定System.errするには、使用する必要がありますSystem.setErr(yourStream);

別の質問について:使用するだけです

try {
    //throwing exception
} catch (Exception e) { 
    //act on exception
}
于 2013-11-01T14:26:46.360 に答える
2

メソッド呼び出しを a でラップしてtry-catch、例外を超えて続行します。

try {
    AddChild1_wy_v1.main(...);
} catch(Throwable t) {
    t.printStackTrace();
}
// the rest of your code will execute

例外は、標準出力ではなく、標準エラーに出力されます。試してみてくださいSystem.setErr

コードの画像を投稿しないでください。

于 2013-11-01T14:05:46.650 に答える