How to Mock Static Methods using PowerMockito

PowerMockito extends Mockito functionality with several new features such as mocking static and private methods. In this example we will see how to mock static methods using PowerMockito. PowerMockito provides PowerMockito.mockStatic(..) method to create Mock object for Static methods and Mockito.when(….) we can set the method call and expected values.

Let us consider below scenario using a static method which requires mocking to test getEmployee method.

EmployeeDetails.java

public class EmployeeDetails {
	public Employee getEmployee(String empName) {
		return EmployeeProvider.getEmployee(empName);
	}
	
}

EmployeeProvider.java

package com.pretech;
public class EmployeeProvider {
	public static Employee getEmployee(String empName) {
		Employee emp = new Employee();
		return emp;
	}
}

Employee.java

public class Employee {
	private String empName;
	private String empAddress;
	//Getters and setters
}

EmployeeDetailsTest.java

import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.legacy.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({EmployeeProvider.class})
public class EmployeeDetailsTest {
	@Mock
	Employee emp;
	@Test
	public void testgetEmployee() throws Exception {
	Mockito.when(emp.getEmpName()).thenReturn("Vinod");
	Mockito.when(emp.getEmpAddress()).thenReturn("Bangalore");
        PowerMockito.mockStatic(EmployeeProvider.class);
        Mockito.when(EmployeeProvider.getEmployee("Vinod")).thenReturn(emp);
        EmployeeDetails empDetails=new EmployeeDetails();
        Assert.assertEquals("Bangalore",empDetails.getEmployee("Vinod").getEmpAddress());
	}
	
}


Notes
PowerMock requires below annotations inside test classes

@RunWith(PowerMockRunner.class)
@PrepareForTest({EmployeeProvider.class})


Output



image


Dependencies used in this example.

<properties>
    <powermock.version>1.5.1</powermock.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4-legacy</artifactId>
        <version>${powermock.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>${powermock.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-easymock</artifactId>
        <version>1.5.1</version>
    </dependency>
</dependencies>

No comments:

Post a Comment

Confusion Matrix + Precision/Recall (Super Simple, With Examples)

  Confusion Matrix + Precision/Recall (Super Simple, With Examples) 1) Binary Classification Setup Binary classification means the model p...

Featured Posts