Mockito ArgumentCaptor не возвращает никаких значений при проверке - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь использовать захват аргументов, чтобы определить, какие аргументы передаются в смоделированный метод 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() представляет собой пустой список. Я хотел бы, чтобы значения возвращали список WATCHITM и BIDITEM. Я не знаю, что я делаю не так.

Справка:

  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

1 Ответ

0 голосов
/ 09 июня 2019

Я думаю, что вы перестарались:

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

Вы очищаете этот ожидаемый вызов метода, а затем комбинируете его с захватчиком аргументов.И это не работает.Вы можете или заглушки или захватить, не обе вещи!См., Например, этот существующий вопрос .

Мое предложение: посмотрите на этот ответ и узнайте, как создать свой собственный объект ответа.Те получают экземпляр InvocationOnMock.И этот класс также позволяет проверять аргументы, передаваемые в ложные вызовы!

...