Accessing Private Features with Reflection
Navigate Reflection topic: ) |
All features of a class can be obtained via reflection, including access to private
methods & variables. But not always see [1].
Let us look at the following example:
Code listing 10.3: Secret.java
public class Secret {
private String secretCode = "It's a secret";
private String getSecretCode() {
return secretCode;
}
}
|
Although the field and method are marked private
, the following class shows that it is possible to access the private
features of a class:
|
|
JUnit - Test Private methods
editJUnit's are unit test cases, used to test the Java programs. Now you know how to test a private method using Reflection in JUnit. There's a long-standing debate on whether testing private members is a good habit[1];There are cases where you want to make sure a class exhibited the right behavior while not making the fields that need checking to assert that public (as it's generally considered bad practice to create accessors to a class just for the sake of a unit test). There are also cases when you can greatly simplify a test case by using reflection to test all smaller private methods (and their various branches), then test the main function. With dp4j [dead link] it is possible to test private members without directly using the Reflection API but simply accessing them as if they were accessible from the testing method; dp4j injects the needed Reflection code at compile-time[2].
- ↑ What's the best way of unit testing private methods?, March 7, 2011
- ↑ Reflection API injected at compile-time [dead link]