使用Mockito为Java 8 lambda表达式编写存根

时间:2017-12-19 18:23:52

标签: java unit-testing lambda mockito powermockito

我有一个方法,我使用Java 8 lambda表达式。在为这个方法编写单元测试时,我需要为该表达式编写存根。我们怎么写这个?

<Component Id="FooBar.ini" Guid="GUID" KeyPath="yes" Permanent="yes">
    <IniFile Id="FooBar.ini" Directory="FOOBARDIR" Name="FooBar.ini"
             Action="addLine" Section="Foo" Key="Bar" Value="1" />
</Component>

我尝试使用here作为 -

的解决方案
public List<User> methodA(String userId) {
    List<User> users = new ArrayList<>();
    userRepository.findAll().forEach(users::add);
    List<User> usersFilterByUserId = users.stream().filter(u -> u.getUserid().equalsIgnoreCase(userId)).collect(Collectors.toList());

    some other stuff ....
}

1 个答案:

答案 0 :(得分:1)

实际上,你在单元测试中模仿了一切 测试变得复杂并失去其价值。

methodA中,你应该模仿的一件事是依赖:

userRepository.findAll().

通过模拟对此方法的调用,您将使用lambda正文中的模拟数据,因为它使用findAll()的结果。

List<User> usersByMock = new ArrayList<>();
usersByMock.add(...);
usersByMock.add(...);
usersByMock.add(...);
...
when(userRepository.findAll()).thenReturn(usersByMock);