Ответ 1
Если вы насмехаетесь над поведением (с чем-то вроде doNothing()
), действительно не нужно звонить на verify*()
. Тем не менее, здесь мой удар по повторному написанию вашего тестового метода:
@PrepareForTest({InternalUtils.class})
@RunWith(PowerMockRunner.class)
public class InternalServiceTest { //Note the renaming of the test class.
public void testProcessOrder() {
//Variables
InternalService is = new InternalService();
Order order = mock(Order.class);
//Mock Behavior
when(order.isSuccessful()).thenReturn(true);
mockStatic(Internalutils.class);
doNothing().when(InternalUtils.class); //This is the preferred way
//to mock static void methods.
InternalUtils.sendEmail(anyString(), anyString(), anyString(), anyString());
//Execute
is.processOrder(order);
//Verify
verifyStatic(times(1)); //Similar to how you mock static methods
//this is how you verify them.
InternalUtils.sendEmail(anyString(), anyString(), anyString(), anyString());
}
}
Я сгруппировался в четыре раздела, чтобы лучше выделить, что происходит:
1. Переменные
Я хочу объявить здесь любые аргументы переменных/методов/mock-коллабораторов. Если это что-то используется в нескольких тестах, подумайте о том, чтобы сделать его переменной экземпляра тестового класса.
2. Mock Behavior
Здесь вы определяете поведение всех ваших mocks. Вы устанавливаете возвращаемые значения и ожидания здесь, перед выполнением тестируемого кода. Вообще говоря, если вы установите здесь ложное поведение, вам не нужно будет проверять поведение позже.
3. Выполнить
Ничего особенного здесь; это просто запускает тестируемый код. Мне нравится давать ему свой раздел, чтобы привлечь к нему внимание.
4. Проверка
Это когда вы вызываете любой метод, начинающийся с verify
или assert
. После того, как тест закончен, вы проверяете, действительно ли произошло то, что вы хотели иметь. Это самая большая ошибка, которую я вижу с помощью вашего тестового метода; вы попытались проверить вызов метода до того, как ему когда-либо была предоставлена возможность запуска. Во-вторых, вы никогда не указали, какой статический метод вы хотите проверить.
Дополнительные примечания
Это в первую очередь личное предпочтение с моей стороны. Существует определенный порядок, который вам нужно делать, но внутри каждой группы есть небольшая комната для маневра. Это помогает мне быстро отделить то, что происходит где.
Я также настоятельно рекомендую ознакомиться с примерами на следующих сайтах, поскольку они очень надежны и могут помочь в большинстве случаев, которые вам понадобятся:
- https://github.com/jayway/powermock/wiki/MockitoUsage (Обзор/примеры PowerMock)
- http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html (Обзор/примеры Mockito)