如何在返回void的方法上运行junit测试?

NEO*_*NEO 0 java junit unit-testing

我无法更改需要测试的方法的签名.测试代码如下所示

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());
Run Code Online (Sandbox Code Playgroud)

parse 方法签名如下

public void parse(String filename, Collection<HDocument> docs)
Run Code Online (Sandbox Code Playgroud)

解析方法运行正常,但是当我运行测试程序时,列表大小始终为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

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 5

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

简而言之:您正在测试parse,并且您的测试正确地告诉您其他内容已被破坏.你的考试没问题; 这parse不一定是错的.(也许您应该问的问题StackOverflow是如何修复您的parse方法.)

  • 你的问题是`docs = docsFromXml`实际上并没有在测试中改变`list`; 它只在`parse`方法中更改它.你不能在`parse`中执行`docs = new ArrayList <HDocument>`或`docs =`anything - ; 相反,你必须保留`docs`,并调用`docs.addAll(docsFromXml)`或改变`docs`的_contents_的东西,而不是引用. (3认同)