Как издеваться над частным методом с помощью powermock?

Если у меня есть простой класс, например:

public class LuckyNumberGenerator {
    public int getLuckyNumber(String name) {
        return getDefaultLuckyNumber();
    }
    private int getDefaultLuckyNumber() { }
}

Какая модификация мне нужна, чтобы имитировать частный метод getDefaultLuckyNumber? у меня это не работает

LuckyNumberGenerator mock = spy(new LuckyNumberGenerator());
when(mock, "getDefaultLuckyNumber").thenReturn(300);

Отвечает ли это на ваш вопрос? Как смоделировать частный метод тестирования с помощью PowerMock?

Progman 20.03.2022 10:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Аннотации PowerMock, необходимые для имитации работы:

@RunWith(PowerMockRunner.class)
@PrepareForTest(LuckyNumberGenerator.class)

Пример рабочего теста:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.powermock.api.mockito.PowerMockito.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest(LuckyNumberGenerator.class)
public class ServiceTest {
    @Test
    public void test() throws Exception {
        LuckyNumberGenerator mock = spy(new LuckyNumberGenerator());
        PowerMockito.when(mock, "getDefaultLuckyNumber").thenReturn(300);
        Assert.assertEquals(300, mock.getLuckyNumber("name"));
    }
}

public class LuckyNumberGenerator {
    public int getLuckyNumber(String name) {
        return getDefaultLuckyNumber();
    }
    private int getDefaultLuckyNumber() {
        return 1;
    }
}

Версия PowerMock:

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.9</version>
            <scope>test</scope>
        </dependency>

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