Как имитировать статический вызов класса из сторонней библиотеки

Мне интересно, возможно ли с помощью PowerMock или любой другой библиотеки имитировать статический вызов в классе из библиотеки. Класс в этой сторонней библиотеке вызывает один из классов в rt.jar, и я хочу вернуть пользовательскую реализацию возвращенного Type. Я пытаюсь сделать это вне тестового кода.

В противном случае мне пришлось расширить несколько классов из этой библиотеки и заменить некоторые реализации. Делал ли кто-нибудь что-нибудь подобное раньше?


person Rag    schedule 11.03.2013    source источник
comment
Не было ли способа «установить» желаемое возвращаемое значение из вашей сторонней библиотеки? это позволит избежать насмешек, поэтому я предполагаю, что вы проверили это в первую очередь.   -  person vikingsteve    schedule 11.03.2013


Ответы (2)


Да, это возможно, например. используя PowerMock.mockStatic() или PowerMock.mockStaticPartial(), если вы хотите издеваться только над одним методом.

На домашней странице PowerMock есть неплохой учебник.

Я опубликовал пример на SO.

[РЕДАКТИРОВАТЬ] ЕСЛИ вы хотите творить такую ​​магию в производственном коде, я бы рекомендовал НЕ использовать Testing-Framework. Возможно, Groovy поможет вам в этом — с помощью Groovy можно манипулировать классами (даже классами JDK) во время выполнения. , и это (я думаю) более тонкий слой поверх JVM.

person Andy    schedule 11.03.2013

Вообще говоря, делать такие хардкорные заглушки - это действительно плохая идея (это не издевательство над тем, что вы описываете). Я бы построил крошечную абстракцию над этой библиотекой, чтобы вы могли полностью контролировать то, что хотите вернуть. Можно использовать некоторые возможности PowerMock вне тестов, но это не так просто. Здесь у вас есть приблизительное описание, которое может помочь, если вы действительно хотите: https://groups.google.com/d/msg/powermock/SMDMe-y6fLg/1HF0TsGOqTIJ

В любом случае я бы не советовал так делать.

person Michal Ostruszka    schedule 11.03.2013