Использование powermockito для макетирования статического метода.Что я делаю неправильно? - PullRequest
0 голосов
/ 12 июня 2018

Я хочу использовать powermock для определения статического метода в классе (фрагмент класса ниже):

public class TestService<T> {
    public static <T> TestService<T> function1(Class<T> rawType, Object id) {

Соответствующая часть тестового класса приведена ниже.При настройке макета, если я явно установлю значение для целочисленного параметра, а затем вызову с тем же значением, все будет работать как положено.Вызов function1 возвращает testServiceProxy.

Однако я хочу вернуть это значение независимо от того, какое значение целого числа передано. Для этого я закомментирую первую строку:

// PowerMockito.when(TestService.function1(Subscription.class,id)).thenReturn(testServiceProxy);

и удалите комментарии со второй строки.

После этого вызовы функции1 возвращают ноль.

Почему ??

@RunWith(PowerMockRunner.class)
@PrepareForTest(TestService.class)
public class TestServiceTest {

    @Mock
    private TestService<Subscription> testServiceProxy;

    @Mock
    private Subscription subscription;

    @Test
    public void testStart() throws Exception {
        Integer id = new Integer(5);

        PowerMockito.mockStatic(TestService.class);
        PowerMockito.when(TestService.getString()).thenReturn("Hello!");
        PowerMockito.when(testServiceProxy.getInt()).thenReturn(new Integer(15));

        PowerMockito.when(TestService.function1(Subscription.class,id)).thenReturn(testServiceProxy);
     //   PowerMockito.when(TestService.function1(Subscription.class,Matchers.eq(any(Integer.class)))).thenReturn(testServiceProxy);

        System.out.println("String: " + TestService.getString());
        System.out.println("TestServiceProxy: "+testServiceProxy);
//      id = new Integer(6);
        System.out.println("Function1: "+TestService.function1(Subscription.class, id));
        TestService<Subscription>  foo = TestService.function1(Subscription.class, id);
        if (foo != null) {
            System.out.println(" foo instrumentId: "+foo.getInt());
            System.out.println(" subselect instrumentId: "+testServiceProxy.getInt());
        } else {
            System.out.println("Foo is null");
        }
    }

}

1 Ответ

0 голосов
/ 13 июня 2018

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

Также мне нужно было использовать класс Mockito, чтобы гарантировать правильность функций при вызове.

PowerMockito.when(TestService.function1(Mockito.any(Class.class), Mockito.any(String.class))).thenReturn(testServiceProxy);

Этот вызов метода правильно устанавливает макеты, которые будут использоваться в моем тестовом примере.

...