How to JUnit Test a Private Method

Posted on 2010-10-31

I was recently writing a cache for MP3s at work, and I needed to test some private methods. Testing a private method in Java is doable using reflection.

public class MP3Cache {

  public MP3Cache() {

  /* let us test this method */
  private boolean returnTrue(String str) {
     if (str.equals("str")){
        return true;
     return false;

Look, in that class, there’s a private method. Let’s test it using the code below.

import java.lang.reflect.Method;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class MP3CacheTest extends TestCase {
  public MP3CacheTest(){

  public static void main(String[] args) { TestSuite(MP3CacheTest.class));

  public void testReturnTrue() throws Exception {

     // class testing
     MP3Cache cache = new MP3Cache();
     Class clazz = MP3Cache.class;

     // parameter classes
     Class[] parameterTypes = new Class[1];
     parameterTypes[0] = String.class;

     // make it accessible
     Method m = clazz.getDeclaredMethod("returnTrue", parameterTypes);

     // test it
     Object[] parameters = new Object[1];
     parameters[0] = new String("str");

     Boolean result = (Boolean)m.invoke(cache, parameters);


Testing private methods is achievable using reflection. Marvellous.