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

标签 java profiling aspectj aop

我们的 Java 应用程序有许多实现通用接口(interface)的模块。通过设计,每个模块都封装良好且可互换。所有进出的调用都通过一小组接口(interface)进行。

我们需要检测这个机制来添加,

  1. 以结构化格式记录方法调用和结果
  2. 在调试问题或测试修复时,对模块重放这些调用。
  3. (最好有)使用记录的交互作为“预期”结果,在运行 JUnit 测试时将它们与“实际”进行比较。
  4. (可能应该)完全线程安全。

有推荐的选项吗?

我浏览了几个选项:

最佳答案

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

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

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

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

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

关于java - 记录/重放 Java 方法调用的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9832553/

相关文章:

java - 如何使用 Buckminster 和 AspectJ 构建包含方面的插件?

java - 货币转换器 API 在 Android 中不起作用

java - 使用 Maven 在 Java 8 中找不到适合 jdbc 的驱动程序

ubuntu - Haskell - GHC 错误 : Could not find module ‘Prelude’/Perhaps you haven't installed the profiling libraries for package ‘base-4.12.0.0’ ?

c++ - 如何在 Visual Studio (C++) 中设置发布分析

java - 使用 AspectJ spring-aop 改变返回值的类型

java - 使用依赖注入(inject)的 AspectJ 类的类构造函数中出现 NoAspectBoundException 错误

java - CXF xml 配置未使用 disableCNcheck ="true"进行验证

java - 无法在 NetBeans 中找到 main

Java JAR 内存使用 VS 类文件内存使用