Мне интересно, возможно ли с помощью PowerMock или любой другой библиотеки имитировать статический вызов в классе из библиотеки. Класс в этой сторонней библиотеке вызывает один из классов в rt.jar, и я хочу вернуть пользовательскую реализацию возвращенного Type. Я пытаюсь сделать это вне тестового кода.
В противном случае мне пришлось расширить несколько классов из этой библиотеки и заменить некоторые реализации. Делал ли кто-нибудь что-нибудь подобное раньше?
Ответ 1 · рейтинг 1 · Andy
Да, это возможно, например. используя PowerMock.mockStatic() или PowerMock.mockStaticPartial(), если вы хотите издеваться только над одним методом.
На домашней странице PowerMock есть неплохой учебник.
Я опубликовал пример на SO.
[РЕДАКТИРОВАТЬ] ЕСЛИ вы хотите творить такую магию в производственном коде, я бы рекомендовал НЕ использовать Testing-Framework. Возможно, Groovy поможет вам в этом - с помощью Groovy можно манипулировать классами (даже классами JDK) во время выполнения. , и это (я думаю) более тонкий слой поверх JVM.
Ответ 2 · Michal Ostruszka
Вообще говоря, делать такие хардкорные заглушки - это действительно плохая идея (это не издевательство над тем, что вы описываете). Я бы построил крошечную абстракцию над этой библиотекой, чтобы вы могли полностью контролировать то, что хотите вернуть. Можно использовать некоторые возможности PowerMock вне тестов, но это не так просто. Здесь у вас есть приблизительное описание, которое может помочь, если вы действительно хотите: https://groups.google.com/d/msg/powermock/SMDMe-y6fLg/1HF0TsGOqTIJ
В любом случае я бы не советовал так делать.