我正在编写JUnit测试,以测试另一个包中的代码,该包必须符合预定义的规范。测试中的代码必须包含一个嵌套类,我想在测试包中实例化它——不可能导入这个类,因为它是嵌套的(因此在原始包外不可见(。
例如,包装结构:
packageA
-> ClassA
-> packageA.ClassA$ClassB
tests
-> ClassATest
我需要在ClassA中测试一个方法,该方法将ClassB的一个实例作为参数。
我目前正在使用反射从ClassA
(我可以导入(获取到ClassB
[cls.getDeclaredClasses
]。然后,我可以获得ClassB
[cls.getDeclaredConstructor
]的构造函数,从而使用找到的构造函数[constructor.newInstance
]创建ClassB
的新实例。这个对constructor.newInstance
的调用返回一个Object
。
如何从返回的Object
类型转换为正确的ClassB
类型,以便将其传递到测试中的ClassA
方法中?
首先可以导入嵌套类。无法"导入静态"静态内部类?
这听起来是一个糟糕的设计,你被迫使用反射进行测试。
因为您从反射中获得了Object
,并且没有可访问的类型,所以还应该再次使用反射将其传递到方法中。