Javaagent Instrumentation Framework 的 JUnit 测试框架
JUnit Test framework for Javaagent Instrumentation Framework
为 Java 代理和检测库的代码创建单元测试的标准方法是什么。我已经使用 Byte Buddy 框架创建了一个 Java 代理,用于在 Web 应用程序之上开发分析器,现在我想为该代理编写 JUnit 测试用例。
您可以从 Byte Buddy's own unit tests 中获得灵感来创建 Java 代理。为此,声明对 byte-buddy-agent 模块的测试依赖。该模块包括一个 class,它能够在运行时使用 ByteBuddyAgent.install()
附加 Java 代理,其中 returns 一个 Instrumentation
实例。确保在 运行 单元测试后删除 Java 代理。否则,您的代理将在任何后续测试中保持活动状态。
创建可重复测试的棘手部分是 class 在应用代理之前不得加载。 Byte Buddy 的测试工具通过创建一个 ByteArrayClassLoader
来解决这个问题,该 ByteArrayClassLoader
能够处理受检测影响的所有 classes。由于此 class 加载程序是动态创建的,因此可以保证这一点。
大多数 JDK 捆绑的 VM 能够在运行时附加 Java 代理。可以肯定的是,Byte Buddy 确实为 JUnit 定义了一个 AgentAttachmentRule
,它在 运行 测试之前断言此功能。你也可以考虑这个。
为 Java 代理和检测库的代码创建单元测试的标准方法是什么。我已经使用 Byte Buddy 框架创建了一个 Java 代理,用于在 Web 应用程序之上开发分析器,现在我想为该代理编写 JUnit 测试用例。
您可以从 Byte Buddy's own unit tests 中获得灵感来创建 Java 代理。为此,声明对 byte-buddy-agent 模块的测试依赖。该模块包括一个 class,它能够在运行时使用 ByteBuddyAgent.install()
附加 Java 代理,其中 returns 一个 Instrumentation
实例。确保在 运行 单元测试后删除 Java 代理。否则,您的代理将在任何后续测试中保持活动状态。
创建可重复测试的棘手部分是 class 在应用代理之前不得加载。 Byte Buddy 的测试工具通过创建一个 ByteArrayClassLoader
来解决这个问题,该 ByteArrayClassLoader
能够处理受检测影响的所有 classes。由于此 class 加载程序是动态创建的,因此可以保证这一点。
大多数 JDK 捆绑的 VM 能够在运行时附加 Java 代理。可以肯定的是,Byte Buddy 确实为 JUnit 定义了一个 AgentAttachmentRule
,它在 运行 测试之前断言此功能。你也可以考虑这个。