简体   繁体   English

JUnit Mockito 测试:零交互

[英]JUnit Mockito Test: zero interactions

I want to test this a List of Objects using Junit and Mockito.我想使用 Junit 和 Mockito 测试这个对象列表。

If the loop is formed so:如果形成循环,则:

       List<Message> owner = new ArrayList<>();

   for (int i = 0; i < messageStorage.getMessage(us.getName()).size(); i++) {
            owner.add(new Message(us.getName() + " - " + messageStorage.getMessage(us.getName()).get(i).getText(),
                    messageStorage.getMessage(us.getName()).get(i).getTime()));
        }
    listOfMessages.addAll(owner);

The test in mockito works fine! mockito 中的测试工作正常!

@Test
public void onTheWallTest() {
    when(clock.now()).thenReturn(parse("2014-12-03T10:15:30.00Z"));

    User follows = new User("someFollower");
    Mockito.when(userStorage.getUser(Matchers.anyString())).thenReturn(follows);
    wall.onTheWall();
    Mockito.verify(messageStorage).getMessage("someFollower");
}

When I use forEach/lambda in this way:当我以这种方式使用 forEach/lambda 时:

 IntStream.range(0, owner.size())
                .forEach(i ->
                        owner.add(new Message(us.getName() + " - " + messageStorage.getMessage(us.getName()).get(i).getText(),
                                messageStorage.getMessage(us.getName()).get(i).getTime()))
                );
        listOfMessages.addAll(owner);

The test fails with the response:测试失败,响应如下:

    Wanted but not invoked:
messageStorage.getMessage("someFollower");
-> at app.command.WallTest.onTheWallTest(WallTest.java:47)
Actually, there were zero interactions with this mock.

I fixed so:我固定这样:

messageStorage.getMessage(us.getName())
              .stream()
              .map(item -> owner.add(
                  new Message(us.getName() + " - " + item.getText(), item.getTime())
              ));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM