私はJava 8ラムダ式を使用しています。このメソッドの単体テストを書く際に、その式のスタブを書く必要があります。それをどうやって書くことができますか?Mockitoを使ってJava 8ラムダ式のスタブを書く
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 ....
}
私はとしてhereを与えられた解決策を試してみました - 実際には、あなたのユニットテストのすべてを模擬
@Test
public void testMethodA() {
ArrayList<User> mockUsers = mock(ArrayList.class);
PowerMockito.whenNew(ArrayList.class).withNoArguments().thenReturn(mockUsers);
User user = mock(User.class);
Iterable<User> mockIt = mock(Iterable.class);
when(userRepository.findAll()).thenReturn(mockIt);
doNothing().when(mockIt).forEach(any());
// This gives compiler error which is obvious
// The method thenReturn(Stream<User>) in the type
// OngoingStubbing<Stream<User>> is not applicable for the arguments (ArrayList<User>)
ArrayList<User> mockUsersFilterByUserId = mock(ArrayList.class);
when(mockUsers.stream()).thenReturn(mockUsersFilterByUserId);
...
}
あなたがしようとしていることはかなり不明です。あなたはすべてのローカル変数をモックしようとしています。だから、あなたは嘲笑の目標を完全に理解していない可能性があります。しかし、 'stream()'は 'ArrayList'ではなく' Stream'を返します。それはあなたの近くの問題です。 –