0

If I have a simple class like:

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

What modification do I need to mock the private method getDefaultLuckyNumber? I have this which doesnt work

LuckyNumberGenerator mock = spy(new LuckyNumberGenerator());
when(mock, "getDefaultLuckyNumber").thenReturn(300);
draca
  • 1,319
  • 5
  • 16
  • 32
  • Does this answer your question? [How to mock private method for testing using PowerMock?](https://stackoverflow.com/questions/7803944/how-to-mock-private-method-for-testing-using-powermock) – Progman Mar 20 '22 at 09:38

1 Answers1

1

PowerMock annotations required for mock working:

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

Example of working test:

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 version:

        <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>
Eugene
  • 5,269
  • 2
  • 14
  • 22