In this post, we will see how to write test cases for private methods using reflection.
We have two classes Employee.java and EmployeeTest.java in the same package reflectionjunit. We have a private method getEmployeename() which returns a string. We are going to write JUnit test cases for this method.
Employee.java
package reflectionjunit;
public class Employee {
private String getEmployeename(String name) {
//some dummy logic
if(name.equals("ram")) {
return name;
}
return "mohan";
}
}
EmployeeTest.java
package reflectionjunit;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.Method;
import org.junit.BeforeClass;
import org.junit.Test;
public class EmployeeTest {
public static Employee employeeObj;
@BeforeClass
public static void beforeClass() {
employeeObj = new Employee();
}
@Test
public void testGetEmployeenameSuccess() throws Exception {
String name = "ram";
Method method = Employee.class.getDeclaredMethod("getEmployeename", String.class);
method.setAccessible(true);
String returnValue = (String) method.invoke(employeeObj, name);
assertEquals(returnValue, "ram");
}
}
Run the above code as Junit.
Yes, we have a success result.
Let’s check the fail case.
package reflectionjunit;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.Method;
import org.junit.BeforeClass;
import org.junit.Test;
public class EmployeeTest {
public static Employee employeeObj;
@BeforeClass
public static void beforeClass() {
employeeObj = new Employee();
}
@Test
public void testGetEmployeenameFailure() throws Exception {
String name = "ram";
Method method = Employee.class.getDeclaredMethod("getEmployeename", String.class);
method.setAccessible(true);
String returnValue = (String) method.invoke(employeeObj, name);
assertEquals(returnValue, "sohan");
}
}
Output is –
This is the fail case. Since we are passing name is sohan but it’s expecting ram.


