我无法更改需要测试的方法的签名。测试代码如下所示
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.我无法更改解析方法签名。我该怎么办?
这是Parser类,
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
}
}
}
答案 0 :(得分:5)
如果parse
应该将结果添加到docs
集合中,并且在运行docs
方法后parse
的大小为零,那么您的测试是告诉你parse
已经坏了,或者你说错了。这就是假设的要做的测试:告诉你某些东西不起作用。
简而言之:您正在正确测试parse
,并且您的测试正确地告诉您其他内容已被破坏。你的考试没问题;它parse
以某种方式必定是错误的。 (也许您应该问StackOverflow的问题是如何修复parse
方法。)
答案 1 :(得分: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
}
}
}