我发现使用mockito匹配器anyList()和任何(List.class)时会有不同的结果。但是,我无法解释这一点,因为两者实际上应该返回相同的结果。也许有人可以启发我。
我使用匹配器来测试控制器。我的控制器将属性绑定到名为myList的模型。我想验证模型属性实际上是一个列表。
model.addAttribute("myList", Arrays.asList("test"));
any(List.class)执行正确的测试:
mockMvc.perform(get("/")).andExpect(model().attribute("myList", any(List.class)));
但AnyList()返回[]是预期的并导致测试失败:
mockMvc.perform(get("/")).andExpect(model().attribute("myList", anyList()));
我需要anyListOf(String.class)来验证列表是否包含字符串,但由于这种行为我无法使用它。
答案 0 :(得分:3)
您正在使用ModelResultMatchers.attribute()
,它会检查名为“myList”的模型属性是否等于第二个参数,即等于any(List.class)
或anyList()
返回的值。
请注意,此方法根本不需要Mockito匹配器。它根本与Mockito无关。它只需要一个值,并检查model属性是否等于此值。
anyList()
返回一个新的空ArrayList。 any(List.class)
返回null。因此,您的第一个测试成功,因为您的控制器碰巧在此模型属性中存储了null,而您的第二个测试失败,因为null不等于空ArrayList。
TL; DR:你不应该在这里使用Mockito匹配器。这是没有意义的。