Java Testing Private methods with reflection: ExampleClass demonstration
Write a Java program to explore strategies for testing private methods in a class.
Sample Solution:
Java Code:
// ExampleClass.java
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ExampleClass {
private int addTwoNumbers(int a, int b) {
return a + b;
}
// Public method that calls the private method
public int performAddition(int a, int b) {
return addTwoNumbers(a, b);
}
// Testing private method using reflection
public static int testPrivateMethod(ExampleClass instance, int a, int b)
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
// Obtain the Class object for the class containing the private method
Class> clazz = instance.getClass();
// Specify the name and parameter types of the private method
Class[] parameterTypes = {int.class, int.class};
Method privateMethod = clazz.getDeclaredMethod("addTwoNumbers", parameterTypes);
// Make the private method accessible for testing
privateMethod.setAccessible(true);
// Invoke the private method on the provided instance
return (int) privateMethod.invoke(instance, a, b);
}
public static void main(String[] args) {
ExampleClass example = new ExampleClass();
// Test the public method that calls the private method
int result = example.performAddition(3, 5);
System.out.println("Result from public method: " + result);
try {
// Test the private method using reflection
int privateMethodResult = testPrivateMethod(example, 3, 5);
System.out.println("Result from private method: " + privateMethodResult);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
Sample Output:
Result from public method: 8 Result from private method: 8
Explanation:
In the exercise above,
- ExampleClass: Defines a class with a private method (addTwoNumbers) and a public method (performAddition) that calls the private method.
- testPrivateMethod Method: Uses reflection to test the private method. This method takes an instance of "ExampleClass", the parameters for the private method, and uses reflection to invoke the private method.
- main Method: Demonstrates how to test the public and private methods. The public method is tested directly, and the private method is tested using the testPrivateMethod utility.
Flowchart:
Java Code Editor:
Improve this sample solution and post your code through Disqus
Previous: Java Custom Assertion Example: Providing Meaningful feedback in tests.
Next: Testing Java Singleton class for Multi-Threading with JUnit.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics