我正在尝试为使用以下对象的内部类作为输入的一段代码编写测试(我已经将名称通用化了)。
public class MockOuterClass implements OuterClass, Mock {
static class MockInnerClass implements InnerClass {
//fields and methods of the nested class
}
//methods of the outer class
}
现在,由于内部类没有可见性标签,因此默认为“保护”。这是我的问题所在:由于测试和源代码位于单独的程序包中,因此如何创建此内部对象的实例?我试图这样做:
MockOuterClass.MockInnerClass test = new MockOuterClass.MockInnerClass();
当我这样做时,Eclipse表示这行是不可接受的(我认为是这种情况,但这是一厢情愿的),因为MockInnerClass默认为protected,因此不能在其程序包之外使用。有什么办法可以使用该类吗?我没有编写源代码,因此不确定内部类上是否缺少“ public”标签是故意的还是程序员的错误。
先感谢您。
最佳答案
暂且不谈,不是一个实际的答案,但我始终将测试与要测试的类放在同一程序包中。至少,在极少数情况下,这是不可能的。
为什么要使用其他包装?是否有充分的理由这样做?
现在,回到答案,如果您坚持要求使用单独的程序包进行测试,除非MockOuterClass
公开了构造(或公开)MockInnerClass
的某种方法,否则您将陷入困境。 (我猜您可以尝试使用Reflection,但是那已经很绝望了。)但是,正如一些人所评论的,该类的作者“打算”隐藏内部类a。拉肯特·贝克。
换句话说,如果您遵循Kent Beck,则应该编写针对MockOuterClass
而不是MockInnerClass
的测试。内部类是“非公开细节”。