【发布时间】:2019-04-11 08:43:50
【问题描述】:
我有一个在其方法之一中具有本地内部类的类:
public class Outer {
String hello = "hello";
public void myMethod() {
class Inner {
public void myInnerMethod() {
System.out.println(hello);
}
}
[...really slow routine...]
(new Inner()).myInnerMethod();
}
}
我想测试myInnerMethod()。所以我使用反射来实例化本地内部类并在其上调用myInnerMethod()。
public void test() {
Object inner = Class.forName("Outer$Inner").newInstance();
inner.getClass().getDeclaredMethod("myInnerMethod").invoke(inner); // hello will be null
}
但是当myInnerMethod()访问hello时,在Outer类的范围内,是null。
有没有办法模拟或以其他方式向myInnerMethod()打招呼?
我知道我可以通过提取内部类来重构我的代码,或者只测试 Outer 的公共方法。但是还有办法吗?
【问题讨论】:
-
好吧,无论如何你都需要一个
Outer的实例来访问hello,那么为什么不在你的测试中也创建一个Outer的实例呢?顺便说一句,我怀疑你得到 NPE,因为hello为空,但你可能得到它,因为对Outer的引用为空(你可以认为对hello的访问实际上是Outer.this.hello)。 -
显示完整的 myMethod 实现.. Inner 如何实例化然后调用
-
感谢@Thomas。我修改了代码中的注释行
-
完成@MaciejKowalski
标签: java unit-testing junit mockito