Javaagent检测框架的JUnit测试框架

Javaagent检测框架的JUnit测试框架,java,unit-testing,junit,byte-buddy,Java,Unit Testing,Junit,Byte Buddy,为Java代理和工具库的代码创建单元测试的标准方法是什么。我已经使用Byte Buddy框架创建了一个Java代理,用于在web应用程序之上开发一个探查器,现在我想为这个代理编写JUnit测试用例。您可以从中获得创建Java代理的灵感。为此,在byte buddy代理模块上声明一个测试依赖项。该模块包括一个类,该类能够在运行时使用ByteBuddyAgent.install()附加Java代理,该类返回一个Instrumentation实例。确保在运行单元测试后删除Java代理。否则,您的代理将

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

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

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


大多数JDK绑定的虚拟机都能够作为Java代理的运行时附件。当然,Byte Buddy确实为JUnit定义了一个
AgentAttachmentRule
,它在运行测试之前断言了这个功能。你也可以考虑这个问题。

你能告诉我如何在测试中移除代理吗?我没有看到卸载或类似的。当从JDK内部加载类时,使用ByteArrayClassLoader的“技巧”是否也起作用?我得到了一个“java.lang.SecurityException:禁止的包名:java.io”。Install返回一个可以通过instrumentation接口删除的转换器。bytebuddy的测试JAR是否可以在任何maven存储库中使用,以允许我们重用您建议的工具,如“AgentAttachmentRule”?不,它们不是,但它的10行代码应该很容易重新创建。(我不想用稳定的API应用这样小的测试工具。)