我如何使用Java反射来实例化无法导入的类?

问题描述 投票:0回答:1

我正在编写JUnit测试,以测试另一个必须符合预定义规范的软件包中的代码。被测试的代码必须包含一个嵌套类,该类要在测试包中实例化-无法导入此类,因为它是嵌套的(因此在原始包外部不可见)。

例如包装结构:

packageA
-> ClassA
     -> packageA.ClassA$ClassB

tests
-> ClassATest

我需要在ClassA中测试一个以ClassB实例作为参数的方法。

我当前正在使用反射从ClassA(我可以导入)到ClassB [cls.getDeclaredClasses]。然后,我可以获得ClassB [cls.getDeclaredConstructor]的构造函数,从而使用找到的构造函数[ClassB]创建constructor.newInstance的新实例。对此constructor.newInstance的调用返回一个Object

如何将返回的Object类型转换为正确的ClassB类型,以便可以将其传递给受测试的ClassA方法?

java junit reflection
1个回答
0
投票

首先,可以导入嵌套类。 Cannot `import static` static inner class?

这听起来是一个糟糕的设计,您不得不使用反射进行测试。

因为您从反射中获得了Object,并且没有可访问的类型,所以您还应该再次使用反射将其传递给方法。

© www.soinside.com 2019 - 2024. All rights reserved.