Как соответствовать String... использовать Mockito и PowerMock

Я недавно изучаю Mockito и PowerMock.

Я столкнулся со следующей проблемой

    //This method belongs to the Messages class
    public static String get(Locale locale, String key, String... args) {
        return MessageSupplier.getMessage(locale, key, args);
    }
    //the new class
    @RunWith(PowerMockRunner.class)
    @PowerMockIgnore( {"javax.management.*"})
    @PrepareForTest({Messages.class, LocaleContextHolder.class})
    public class DiscreT {

        @Test
        public void foo() {

            PowerMockito.mockStatic(LocaleContextHolder.class);
            when(LocaleContextHolder.getLocale()).thenReturn(Locale.ENGLISH);

            PowerMockito.mockStatic(Messages.class);
            when(Messages.get(Mockito.any(Locale.class),Mockito.anyString(), Mockito.any(String[].class)))
                    .thenReturn("123156458");

            System.out.print(Messages.get(LocaleContextHolder.getLocale(), "p1"));

            System.out.print(Messages.get(LocaleContextHolder.getLocale(), "p1", "p2"));

        }
    }

Результат: NULL 123156458

Зачем? и как соответствовать строке...

1 ответ

Решение

В вашем первом System.out.print утверждение, вы используете 2 аргумента для Messages.get метод. Это одна из перегрузок метода, над которыми вы не смеялись. Вот почему он возвращает ноль. Обратите внимание, что объектные макеты, у которых не было смоделированного поведения, по умолчанию вернут нуль.

Вы бы издевались Messages.get(Locale, String) метод, если вы хотите, чтобы это работало

when(Messages.get(Mockito.any(Locale.class),Mockito.anyString()))
                    .thenReturn("123156458");

Помните, тот факт, что вы высмеяли метод, который принимает большинство аргументов, не означает, что Mockito понимает и высмеивает остальные перегрузки! Вы должны издеваться над ними.

Нет способа смоделировать метод один раз и автоматически смоделировать все его перегрузки, насколько я знаю, однако, есть способ создать фиктивный объект и настроить ответ по умолчанию для всех его методов. Проверьте http://www.baeldung.com/mockito-mock-methods

Другие вопросы по тегам