Javaagent Instrumentation Framework 的 JUnit 测试框架

Vim*_*dav 4 java junit unit-testing byte-buddy

为 Java 代理和检测库的代码创建单元测试的标准方法是什么?我已经使用 Byte Buddy 框架创建了一个 Java 代理,用于在 Web 应用程序之上开发分析器,现在我想为该代理编写 JUnit 测试用例。

Raf*_*ter 6

您可以从Byte Buddy 自己的用于创建 Java 代理的单元测试中获得灵感。为此,声明对byte-buddy-agent模块的测试依赖项。该模块包含一个能够在运行时附加 Java 代理的类,ByteBuddyAgent.install()该代理返回一个Instrumentation实例。确保在运行单元测试后删除 Java 代理。否则,您的代理将保持活跃状态​​以进行任何后续测试。

创建可重复测试的棘手部分是在应用代理之前不得加载类。Byte Buddy 的测试工具通过创建一个ByteArrayClassLoader能够处理所有受检测的类的测试工具来解决这个问题。由于该类加载器是动态创建的,因此可以保证这一点。

大多数 JDK 捆绑的 VM 都能够在运行时附加 Java 代理。不过,可以肯定的是,Byte Buddy 确实AgentAttachmentRule为 JUnit 定义了一个在运行测试之前断言此功能的方法。您也可以考虑这一点。

  • 安装返回一个可以通过仪器接口移除的变压器。 (2认同)