0

テストが必要なメソッドのシグネチャを変更できません。テストコードは以下のようになります

Parser test = new Parser(props);
ArrayList<HDocument> list = new ArrayList<HDocument>();

test.parse("/users/mac/test.xml", list);
System.out.println("Size of list: "+list.size());
assertEquals(5, list.size());

parseメソッドのシグネチャは次のとおりです

public void parse(String filename, Collection<HDocument> docs)

解析メソッドは正常に実行されますが、テスターを実行すると、リスト サイズが常に 0 になります。解析メソッドのシグネチャを変更できません。どうすればいいですか?

これがパーサークラスです。

class Parser{
private Collection<HDocument> docs;
     public void parse(String filename, Collection<HDocument> docs) {
        docs = new ArrayList<HDocument>();
        Collection<HDocument> docsFromXml = new ArrayList<HDocument>();

            Handler hl = new Handler();
            try {
                docsFromXml = hl.getDocs(filename);
            } catch (Exception e) {
                e.printStackTrace();
            }
            docs = docsFromXml;
            System.out.println("Size:"
                    + docs.size()); // This prints the size correctly

        }
    }

}
4

2 に答える 2

5

が結果をコレクションparseに追加することになっていて、メソッドの実行後に のサイズがゼロの場合、テストはそれが壊れていることを示しているか、間違っていると言っています。それがテストの本来の役割です。つまり、何かが機能していないことを伝えます。docsdocsparseparse

要するにparse、あなたは正しくテストしており、あなたのテストは他の何かが壊れていることを正しく伝えています. あなたのテストは問題ありません。それparseはどこか間違っているに違いない。(おそらく、StackOverflow に尋ねるべき質問は、メソッドを修正するparse方法です。)

于 2013-09-17T21:31:09.807 に答える
1

エラーは parse-method 自体です。

public void parse(String filename, Collection<HDocument> docs) {
    docs = new ArrayList<HDocument>(); /* First problem here: The method should add values to the parameter not to a new List-Instance */
    [...]
    docs = docsFromXml; // second error here. you overwrite the list again.

次のようになります。

public void parse(String filename, Collection<HDocument> docs) {
        if(docs==null) throw new IllegalArgumentException("no list for adding values specified");
        if(filename==null) throw new IllegalArgumentException("no filename specified");
        Handler hl = new Handler();
        try {
            docs.addAll(hl.getDocs(filename));
        } catch (Exception e) {
            throw new RuntimeEception(e); // never sink exception without proper handling
        }

    }
}
于 2013-09-17T21:51:52.633 に答える