微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Mockito 对以下代码进行单元测试

如何解决使用 Mockito 对以下代码进行单元测试

List<String> lineArray = new ArrayList<String>();
Resource resource = resourceLoader.getResource("classpath:abc.txt");
InputStream in = resource.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
    if(line.startsWith("#")) {
        lineArray.add(reader.readLine());           }
}
reader.close();

以上代码是返回 void 的函数的一部分,我可以模拟 Resource 和 ResourceLoader,但无法找到模拟 BufferedReader 的方法。我还想模拟 List 并在 List.add() 上调用 Mockito.verify()。

解决方法

如果列表是方法本地的,则没有副作用供您测试。再说一次,在非测试代码中使用这种方法也没有明显的目的,因为您将数据读入列表,然后将其丢弃。

您需要将列表作为参数注入到方法中:

void yourMethod(List<String> lineArray) {
  Resource resource = resourceLoader.getResource("classpath:abc.txt");
  // ... etc.
}

您现在可以通过在您的测试中调用 yourMethod 来测试这一点,并带有一个 List 参数,您可以在之后进行检查。

我还想模拟 List 并在 List.add() 上调用 Mockito.verify()。

基本上不需要mock一个List,特别是为了这个目的:注入一个列表,一个普通的ArrayList,在方法之后检查列表增长了1打电话。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。