Share the joy
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>