模拟集合中的排序方法



我有一个代码,我想进行单元测试。代码使用Collections.sort方法,为其提供我们自己的甜蜜比较器,例如:

List<Something> something = somethingService.doSomething(someParameter);
Collections.sort(something, somethingComparator);

现在,在测试函数时,我模拟somethingService并stub doSomething方法,如:

List<Something> mockList = Mockito.mock(List.class); 
Mockito.when(somethingService.doSomething(anyInt())).thenReturn(mockList);

和我嘲笑集合为:

PowerMockito.mockStatic(Collections.class);
PowerMockito.doNothing().when(Collections.class, "sort", anyListOf(Something.class), anyOf(Comparator.class));

但是它给了我:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Misplaced argument matcher detected
You cannot use argument matchers outside of verification or stubbing.

现在我确实知道,如果我们在函数的任何参数中使用参数匹配器,我们需要为所有参数提供匹配器。但是这里有可能做同样的事情,如果没有,那么现有的解决方案是什么?

您正在使用PowerMock来模拟JDK中的系统类,从设计角度来看,它真的非常非常讨厌。严肃地说,我们应该好好考虑一下作者自己使用Powermock的动机。

Powermock不能真正直接模拟系统类中的静态方法,您必须在系统调用周围创建包装器,如wiki中所述。

我强烈建议您提取一些排序策略,您可以使用Mockito进行模拟。

相关内容

  • 没有找到相关文章

最新更新