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)

parse 方法运行良好,但是当我运行测试器时,列表大小始终为 0。我无法更改 parse 方法签名。我该怎么做?

这是解析器类,

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应该将结果添加到docs集合中,并且docs在您运行该方法后大小为零parse,那么您的测试告诉您它parse已损坏,或者您称它错误。这就是测试应该做的:告诉你某些东西不起作用。

简而言之:您正在正确地测试parse,并且您的测试正确地告诉您其他东西被破坏了。你的测试很好;这parse一定是错误的。(也许你应该问 StackOverflow 的问题是如何修复你的parse方法。)

于 2013-09-17T21:31:09.807 回答
1

错误是解析方法本身。

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 回答