记录/重放Java方法调用的工具

Iai*_*ain 5 java aop profiling aspectj

我们的Java应用程序有许多实现通用接口的模块.通过设计,每个模块都具有良好的封装性和可互换性.所有来电/来电都来自一小组接口.

我们需要设法这个机制来添加,

  1. 以结构化格式记录方法调用和结果
  2. 在调试问题或测试修复时,重复对模块的这些调用.
  3. (Nice-to-have)将记录的交互作为"预期"结果,在运行JUnit测试时将它们与"Actual"进行比较.
  4. (可能应该)完全线程安全.

有推荐的选择吗?

我瞥了几个选项:

mik*_*era 2

假设您非常严格地遵守一小组接口,那么您可以使用执行以下操作的包装器对象:

  • 实现接口
  • 记录/记录输入
  • 将调用委托给底层对象
  • 记录/记录结果
  • 返回结果给调用者

您还可以修改工厂方法以返回包装对象而不是底层对象,以便这些包装器的使用相当透明。

请注意,您需要非常小心参数的可变性:理想情况下,所有参数都是不可变的,但如果不是,您将需要进行深层复制(可能通过序列化)。

理论上,您还可以使用记录的输入来启用播放和/或测试......但我会谨慎地不要对此期望过高,因为播放需要您捕获所有相关状态(包括外部状态,例如数据库事务,文件系统访问等)一般来说,这是很难实现的,尽管您可能能够使其在您的特定情况下工作。