【问题标题】:Matching a not empty list as an argument using Mockito [duplicate]使用 Mockito 匹配非空列表作为参数 [重复]
【发布时间】:2019-01-18 16:40:08
【问题描述】:

在编写一些单元测试时,如果输入参数不是空列表,我需要检测模拟以返回给定结果。知道列表存储哪些值并不重要。唯一重要的是它不是空的。

我正在使用 Mockito,我正在搜索类似以下内容。

when(mock.someMethod(anyNotEmptyList(String.class))).thenReturn(42);

我用谷歌搜索了一下,但找不到任何东西。

【问题讨论】:

  • 首先,感谢您的链接。问题类似,但不一样。但是,您发布的链接中包含的信息可以用来解决我的问题:)
  • 您能否通过编辑问题给我们提供解决方案? :) @riccardo.cardin
  • 完成。我认为我应该得到 +1 :P
  • 不要编辑您的问题以在此处添加答案。如果您想发布答案,请使用答案部分。
  • @Tom,你伤我太深了 :(

标签: java unit-testing mockito hamcrest


【解决方案1】:

您可以使用 Mockito Answer 做到这一点,而无需使用 Harmcrest:

 when(mock.someMethod(anyListOf(String.class)))
.then(invocation -> { 
                      List<String> list = invocation.getArgument(0);
                      return list.size() > 0 ? 42 : null;
                    }
 );

在这里,我将null 指定为默认值,这是在 Mock 上调用的方法的默认返回值(当然没有考虑好的值)。

【讨论】:

    【解决方案2】:

    根据我评论的重复,您应该尝试:

    class IsAtLeastOneElementList extends ArgumentMatcher<List<String>> {
        public boolean matches(Object list) {
            return ((List) list).size() > 0;
        }
    }
    

    【讨论】:

    • 不要复制重复问题的答案。您已将该问题标记为重复问题,这就是您需要做的所有事情。
    • 事实证明这并不是真正的重复,我不只是复制问题,而是回答了它。我不知道这不是使用 Stackoverflow 的好方法,所以感谢您的反馈
    • 它是重复的。 “其他”问题不需要问同样的问题,只有那里的答案也回答了这里的问题才重要。就像 Riccardo 在其中一个 cmets 中所说的那样,这里就是这种情况。然后,这里的这个问题就像一个路标,让其他人被引导到他们想要的答案所在的另一个问题。
    • 我不太了解声誉,但我认为您可以将其作为 9000 分的副本关闭,不是吗?
    • 我可以投票关闭它。一个问题需要 5 票才能结束。您已经对其进行了标记(标记与投票不同),因此其他人可以查看,然后在他们同意的情况下投票关闭它。 (您需要 3000 分才能投出这样的一票)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多