Outils pour enregistrer / rejouer les appels de méthode Java


Notre application Java a un certain nombre de modules qui implémentent une interface commune. De par sa conception, chaque module est bien encapsulé et interchangeables. Tous les appels vers / depuis passent par un petit ensemble d'interfaces.

Nous devons instrumenter ce mécanisme pour ajouter,

  1. Enregistrer les appels de méthode et les résultats dans un format structuré
  2. Rejouez ces appels par rapport au module, lors du débogage d'un problème ou du test d'un correctif.
  3. (Agréable à avoir) Utiliser les interactions enregistrées comme un Résultat "attendu", comparez-les à "Réel" lors de l'exécution des tests JUnit.
  4. (probablement-devrait-avoir) Être entièrement thread-safe.

Existe-t-il des options recommandées pour cela?

Quelques options que j'ai regardées:

Author: Iain, 2012-03-23

1 answers

En supposant que vous soyez très strict sur l'adhésion à votre petit ensemble d'interfaces, vous pouvez utiliser des objets wrapper qui font ce qui suit:

  • Implémenter l'interface
  • Log/enregistrer les entrées
  • Déléguer l'appel à l'objet sous-jacent
  • Log / enregistrer le résultat
  • Renvoie le résultat à l'appelant

Vous pouvez également modifier les méthodes d'usine pour renvoyer des objets encapsulés plutôt que les objets sous-jacents afin que l'utilisation de ces wrappers soit de façon assez transparente.

Notez que vous devrez faire très attention à la mutabilité des paramètres: idéalement, tous les paramètres seraient immuables mais sinon, vous devrez prendre des copies profondes (peut-être via la sérialisation).

Théoriquement, vous pouvez également utiliser les entrées enregistrées pour activer la lecture et/ou les tests.... mais je serais prudent d'attendre trop de cela car la lecture vous obligerait à capturer tout état pertinent (y compris l'état externe comme DB transaction, accès au système de fichiers, etc.) En général, cela est difficile à réaliser, bien que vous puissiez le faire fonctionner dans votre cas spécifique.

 1
Author: mikera, 2012-03-23 00:56:01