提问者:小点点

在测试用例中使用Mockito是否可能返回LinkedHashMap的空列表


我正在编写一个单元测试,它访问App类中LinkedHashMap的一个公共变量。 我想模仿这个返回空列表,请问我怎么做

App有这个变量

  public LinkedHashMap<String, ArrayList<QCCheck>> mapOfQCC =
        new LinkedHashMap<>();

单元测试要求mapOfQCC返回空列表

我试过了,但没有用

every(app.mapOfQCC).thenReturn(LinkedHashMap<String, ArrayList<QCCheck>>())

错误

when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

预先感谢R


共2个答案

匿名用户

错误消息是不言而喻的。 您正在尝试存根字段访问:

every(app.mapOfQCC).thenReturn(LinkedHashMap<String, ArrayList<QCCheck>>())

这在Mockito身上是不可能的。 您只能存根方法调用。

您有两个选项:

  • 为您的字段提供一个getter(可能的话,将字段设置为私有字段)。 将吸气器存根。
  • 在测试中设置字段。 是公开的。 没有什么能阻止您这样做。

匿名用户

LinkedHashMap<String, ArrayList<QCCheck>> keepOldIfNeed = app.mapOfQCC; // keep the list in object if you need 
app.mapOfQCC = new LinkedHashMap<>(); // this is empty