Daily Archives: July 14, 2015

Mock private variable

Use PowerMock to mock private variable.

MyClass.java

public class MyClass {

    private String str;

    public String getStr(){
        return str;
    }

}

TestDrive.java

public class TestDrive {

    @Test
    public void test1() {
        MyClass myClass = new MyClass();
        try {
            MemberModifier.field(MyClass.class, "str").set(myClass, "This is a mock string injected by test.");
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        assertEquals("This is a mock string injected by test.", myClass.getStr());
    }

}

dependencies

<dependencies>
    <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>3.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-easymock</artifactId>
        <version>1.5</version>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.6.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
</dependencies>