2013-03-11 3 views
1

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

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

+0

Не было ли способа установить желаемое возвращаемое значение из вашей сторонней библиотеки? что бы избежать насмешек, поэтому я предполагаю, что вы проверили это в первую очередь. – vikingsteve

ответ

0

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

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

Я разместил an example on SO.

[EDIT] ЕСЛИ вы хотите сделать такую ​​магию в производственном коде, однако я бы рекомендовал НЕ использовать Testing-Framework. Может быть, Groovy может помочь вам в этом - с Groovy можно манипулировать классами (даже классами JDK) во время выполнения, и это (я думаю) более тонкий слой поверх JVM.

0

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

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

Смежные вопросы