Как я могу использовать java отражение, чтобы создать экземпляр класса, который не может быть импортирован? - PullRequest
0 голосов
/ 26 марта 2020

Я пишу тесты 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 под тестом?

1 Ответ

0 голосов
/ 26 марта 2020

Во-первых, можно импортировать вложенный класс. Невозможно `импортировать статические` данные c внутренний класс?

Это звучит как плохой дизайн, который вы вынуждены использовать для испытаний для отражения.

Поскольку у вас есть Object от отражения, и у вас нет доступного типа, вам также следует снова использовать отражение, чтобы передать его в метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...