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

时间:2012-03-23 00:28:50

标签: java profiling aspectj aop

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

我们需要使用此机制来添加,

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

  5. 是否有推荐选项?

    我瞥了几眼:

1 个答案:

答案 0 :(得分:1)

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

  • 实施界面
  • 记录/记录输入
  • 委托对基础对象的调用
  • 记录/记录结果
  • 将结果返回给来电者

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

请注意,您需要非常小心参数的可变性:理想情况下,所有参数都是不可变的,但如果不是,则需要采用深拷贝(可能通过序列化)。

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