Method method = TargetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
Class obj = test.getClass(); // create an object of the class named Class
Field field = obj.getDeclaredField("fieldname"); // access the private variable
field.setAccessible(true); // make private field accessible
field.set(test,"value"); // setting a field value
2条答案
按热度按时间idv4meu81#
你可以使用反射,我能够得到以下工作。
考虑以下情况,
Class1
和Class
。下面的方法将返回
Class2
的示例。此外,来自JUnit 4常见问题解答。
JUnit 4-如何测试私有方法?
测试私有方法可能表明这些方法应该移到另一个类中以提高可重用性。
但如果你一定要...
如果您使用的是JDK 1.3或更高版本,则可以在PrivilegedAccessor的帮助下使用反射来破坏访问控制机制。有关如何使用它的详细信息,请阅读this article。
如果您使用的是JDK 1.6或更高版本,并且使用@Test注解测试,则可以使用Dp 4j在测试方法中注入反射。有关如何使用它的详细信息,请参阅this test script。
zazmityj2#
如果嵌入类的访问修饰符与公共getter相结合,那么它将更加可行和可靠。此外,每次调用
retrieveClass()
时,它都会强制您拥有一个新示例。说...
即使你让反射在幕后用一种嘲弄的行为来处理它,它可能会工作,但我也不会依赖于那些不可靠的代码。因为你需要它可测试。
或者,这些可能是不需要的解决方法: