2015-06-04 3 views
2

Я работаю над большим проектом Android, который использует Gson. Метод fromJson() называется десятками раз во многих файлах. При каждом вызове метода мне нужно предоставить некоторые специальные тесты.Как переопределить методы библиотеки в Java?

Вместо того, чтобы проходить и повторять тесты каждый раз, когда этот метод используется, я хотел бы следовать доктрине DRY и просто переопределить метод fromJson().

Моя первая мысль - создать дочерний класс Gson и переопределить метод, но мне все равно придется делать десятки (возможно, сотни) изменений, чтобы сделать эту работу. Но даже если бы я был готов выполнить эту работу, Gson final и, следовательно, не может быть расширен.

Вторая мысль: возможно, будет возможно изменить код библиотеки Gson. Но я не хочу идти по этому маршруту, поскольку я боюсь, что могу сломать то, что в противном случае работает отлично.

Это область Java, с которой я никогда не отваживался. У кого-нибудь есть предложения?

+0

Не могли бы вы использовать [Aspectj] (https://eclipse.org/aspectj/)? –

+0

Try Spy from Mockito: http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html - вы можете переопределить именно один метод, добавить туда некоторую логику, а затем вызвать реальный метод , – user3707125

+0

Я не использовал ни Аспект, ни Мокито. Я не хочу добавлять еще одну библиотеку в этот проект, но я потрачу час, изучая эти возможности. –

ответ

0

Поскольку ответов нет, я собираюсь идти вперед и дать свой собственный ответ.

Если класс/метод библиотеки объявлен final, весь смысл состоит в том, чтобы никогда не наследовать или переопределять упомянутый класс. А поскольку это библиотека (и у меня нет доступа к источнику), нет способа ее изменить.

  • Решение №1: Напишите свою собственную библиотеку. Который, конечно же, поражает всю цель использования библиотек (чтобы не было необходимости изобретать колесо).

  • Решение №2: Найдите обход. Как взломать, как это звучит, это , вероятно, самый разумный выбор.

  • Решение № 3: Живите с ошибкой/ошибкой/отсутствием возможности. Не все номера являются демонстрационными стопорами. Возможно, у вас будет отличная программа , которая по-прежнему не соответствует каждой детали.

  • Решение №4: Забросить проект. Иногда это может быть жизнеспособным вариантом . Но не для меня в это время.

+0

Если вам не нравится решение, не стесняйтесь писать самостоятельно. Если он даже полупонят, я дам ему чек. По крайней мере, напишите комментарий, чтобы объяснить проголосовать! –

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