Mockito ArgumentCaptor 在验证时不返回任何值



我正在尝试使用参数捕获来确定哪些参数被传递给模拟的Mockito方法,但我无法捕获任何值。

class CombinedEvent 
{
   final List<String> events;
   public CombinedEvent() {
      this.events = new ArrayList<>();
      this.events.add("WATCHITM");
      this.events.add("BIDITEM");
   }
}

持有人类

class CombinedNotificationAdapter {
    private CombinedEvent combinedEvent;
     CombinedNotificationAdapter() {
        this.combinedEvent  = new CombinedEvent();
     }
     public boolean isEnabled(String user, NotificationPreferenceManager preferenceManager) {
         boolean status = true;
         for (String event : combinedEvent.events) {
            status = status && preferenceManager.isEventEnabled(user, event);
         }
         return status;
     }
}

我的单元测试

@RunWith(JUnit4.class)
class CombinedNotificationAdapterTest {
   private CombinedNotificationAdapter adapter;
   @Mock
   private NotificationPreferenceManager preferenceManager;
   @Before
   public void setUp() {
       MockitoAnnotations.initMocks(this);
       adapter = new CombinedNotificationAdapter();
   }
   @Test
   public void testIsEnabled() {
      doReturn(true).when(preferenceManager).isEventEnabled(eq("test"), anyString());
      Assert.assertTrue(adapter.isEnabled("test", preferenceManager));
      ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
       verify(preferenceManager, times(2)).isEventEnabled(eq("test"), captor.capture());
       System.out.println(captor.getAllValues());
   }
}

captor.getAllValues()的输出是一个空列表。我希望这些值返回WATCHITMBIDITEM的列表。 我不知道我出了什么问题。

参考:

  1. https://static.javadoc.io/org.mockito/mockito-core/2.28.2/org/mockito/Mockito.html#15

  2. https://static.javadoc.io/org.mockito/mockito-core/2.6.9/org/mockito/ArgumentCaptor.html

我认为你做得太过分了:

doReturn(true)
 . when(preferenceManager)
 .isEventEnabled(eq("test"), anyString()):

您正在清理预期的方法调用,然后将其与参数捕获器组合在一起。这是行不通的。您可以存根或捕获,而不是两者兼而有之!例如,请参阅此现有问题。

我的建议:看看这个答案,学习如何创建自己的Answer对象。这些被传递了一个InvocationOnMock的实例。该类还允许您检查传递到模拟调用中的参数!

相关内容

  • 没有找到相关文章

最新更新