Я использую PowerMock для макетирования статических методов на JOptionPane
, но JRE, похоже, не очень соответствует этому, потому что я получаю java.lang.VerifyError
при инициализации, так как он проверяет целостность своих собственных пакетов и классы.
У меня есть несколько обходных путей, но я не очень доволен любым из них:
Напишите объектную оболочку для JOptionPane
и предоставьте интерфейс для необходимых мне методов (showInputDialog
и т. Д.), Чтобы я мог внедрить макет или заглушку для тестирования. Это просто перемещает проблему в другое место, поскольку мне все равно нужно было бы охватить мои методы-оболочки, но, по крайней мере, они будут изолированы от логики.
Используйте экземпляр JOptionPane
вместо ссылки на класс, чтобы вызывать методы для него (я думаю, у меня не возникнет никаких проблем с насмешкой над экземпляром, так как класс не является окончательным). Недостатком является то, что я получу много предупреждений типа «вызов статического метода для переменной экземпляра», но это цена, которую нужно заплатить.
Не смеяться над JOptionPane
и использовать Robot
для запуска входных событий для его обработки. Это может быть очень громоздким и не очень надежным ... Кроме того, я использую внутренние диалоги, и это требует дополнительной работы для настройки JDesktopPane
, JInternalFrame
s и т. Д.
Любые другие идеи или предложения?
Спасибо!
обновление: кстати, я попытался смоделировать JOptionPane
экземпляр , и кажется, что диспетчер методов игнорирует экземпляр, выбирающий непосредственно ранее существующий статический метод (в конце концов, это имеет смысл) поэтому второй вариант отбрасывается.