In this tutorial I will show you how to use JUnit 4 with PowerMock for mocking Static classes into your application. If you have not already done so follow JUnit 4 tutorial.
POM.xml
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>2.18.3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <version>3.10.0</version>
- <scope>test</scope>
- </dependency>
Static Class
We will create this class to use for our static testing.
- public final class MyStaticTest {
- public static String getString() {
- return "test";
- }
- }
Imports
- import static org.assertj.core.api.Assertions.assertThat;
- import static org.mockito.Mockito.when;
- import org.junit.Before;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.mockito.MockitoAnnotations;
- import org.powermock.api.mockito.PowerMockito;
- import org.powermock.core.classloader.annotations.PrepareForTest;
- import org.powermock.modules.junit4.PowerMockRunner;
Test Class
Now we can run our test with PowerMock and mock our static classes methods as you can see from the below.
- @RunWith(PowerMockRunner.class)
- @PrepareForTest({ MyStaticTest.class })
- public class AppTestStatic {
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- PowerMockito.mockStatic(MyStaticTest.class);
- }
- @Test
- public void myTest() {
- when(MyStaticTest.getString()).thenReturn("myTest");
- final String returnString = MyStaticTest.getString();
- assertThat(returnString).isEqualTo("myTest");
- }
- }