Инструменты для записи / воспроизведения вызовов методов Java - PullRequest
5 голосов
/ 23 марта 2012

Наше Java-приложение имеет ряд модулей, которые реализуют общий интерфейс.По своему дизайну каждый модуль хорошо инкапсулирован и взаимозаменяем.Все вызовы в / из проходят через небольшой набор интерфейсов.

Нам необходимо добавить этот механизм в инструмент,

  1. Записать вызовы методов и результаты - в структурированном формате
  2. Воспроизведение этих вызовов к модулю при отладке проблемы или тестировании исправления.
  3. (Приятно иметь) Использовать записанные взаимодействия как «ожидаемый» результат, сравнить их с «Actual 'при выполнении тестов JUnit.
  4. (вероятно, должен иметь) Быть полностью поточно-ориентированным.

Есть ли рекомендуемые варианты для этого?* Несколько вариантов, на которые я взглянул:

1 Ответ

1 голос
/ 23 марта 2012

Если вы очень строго придерживаетесь небольшого набора интерфейсов, вы можете использовать объекты-оболочки, которые делают следующее:

  • Реализация интерфейса
  • Журнал / запись входов
  • Делегировать вызов базовому объекту
  • Записать / записать результат
  • Вернуть результат вызывающей стороне

Вы также можете изменить фабричные методы так, чтобы они возвращали обернутые объекты, а не нижележащие объекты, чтобы использование этих оболочек было достаточно прозрачным.

Обратите внимание, что вам нужно быть очень осторожным с изменчивостью параметров: в идеале все параметры должны быть неизменяемыми, но если нет, вам нужно будет делать глубокие копии (возможно, через сериализацию).

Теоретически вы можете также использовать зарегистрированные входы для включения воспроизведения и / или тестирования .... но я бы с осторожностью ожидал от этого слишком многого, так как воспроизведение потребовало бы, чтобы вы зафиксировали все релевантные состояние (включая внешнее состояние, такое как транзакция с БД, доступ к файловой системе и т. д.) В общем, этого трудно достичь, хотя вы могли бы заставить его работать в вашем конкретном случае.

...