2015-10-16 7 views
0

Я запускаю тест на своем классе с использованием Mockito. Тест проверяет, что вызывается метод, называемый postMessage (destination, messageString).Метод mockito, называемый дважды

Мой тест направлен на проверку того, что в зависимости от содержимого сообщения postMessage() вызывается один или два раза.

Проблема у меня в том, что в моем классе у меня есть 2 вызова postMessage(). Разница между двумя вызовами - это назначение - вызовы отправляют сообщение в 2 разных адресата.

например.

1. postMessage(destination-1, message) 

2. postMessage(destination-2, message) 

Когда я звоню проверить с 1 раза, как и

//actually called twice because of destination-1 and destination-2 
verify(sender, times(1)).postMessage(Mockito.<javax.jms.Destination>.any(), Mockito.<String>.any()); 

фактическое число 2. Я знаю, что число 2 является правильным, потому что это в два раза называется, но я хочу, чтобы изолировать тест на только метод, вызванный с пунктом назначения-2.

Кроме того, когда я хочу проверить, что postMessage() называется нулевым временем (сообщение не отправлено), мой тест будет справедливо утверждать, что postMessage() был вызван один раз - это потому, 1.

//actually called once because of destination-1 
verify(sender, times(0)).postMessage(Mockito.<javax.jms.Destination>.any(), Mockito.<String>.any()); 

Так что мой вопрос - как я могу изолировать мой тест, чтобы испытывать именно то, что я хочу, а не поведение моего первого обращения к PostMessage()?

+0

Что такое '' destination-1''/'' 2''? Кажется, это целое число для меня ... –

+0

Почему вы используете 'Mockito. .any()', если вы не хотите сопоставлять _any_ Destination? Вместо этого используйте 'eq (destXYZ)', а «destXYZ» - ваш пункт назначения для тестирования. – Tom

+0

Как насчет разделения метода, который вызывает 'postMessage' для адресата-1 и пункта назначения-2 на два отдельных метода. Затем проверьте количество вызовов каждого метода отдельно. –

ответ

0

В соответствии с предложением Тома: Почему вы используете Mockito..any(), если вы не хотите соответствовать любому пункту назначения? Используйте eq (destXYZ) вместо того, чтобы «destXYZ» был вашим пунктом назначения для тестирования.

Замена:

//actually called twice because of destination-1 and destination-2 
verify(sender, times(1)).postMessage(Mockito.<Destination>.any(), Mockito.<String>.any()); 

с

Destination myDest = mock(Destination.class); 

//actually called twice because of destination-1 and destination-2 
verify(sender, times(1)).postMessage(myDest, Mockito.<String>.any()); 
worked. 

прошел мой тест.

Смежные вопросы