如何验证和编写测试用例以检查 ASM/Byte Buddy 实例是在运行时创建的

How to validate and write test cases to check ASM/Byte Buddy instances were created in runtime

我有用 ASM 和 Byte Buddy 编写的代码,我需要编写测试用例以确保这些实例确实是在运行时创建的。

关于应该如何着手的任何想法?

我假设您是在询问如何验证生成的 classes。作为灵感,have a look at Byte Buddy's tests 当然会测试生成的代码。一个简单的测试可以是这样的:

 Class<?> type = new ByteBuddy()
     .makeInterface()
     .make()
     .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
     .getLoaded();
assertThat(Modifier.isPublic(type.getModifiers()), is(true));
assertThat(type.isEnum(), is(false));
assertThat(type.isInterface(), is(true));
assertThat(type.isAnnotation(), is(false));

以上测试验证了接口的创建。使用反射 API,您可以在创建后与生成的 class 进行交互。

Byte Buddy 提供了 ClassLoadingStrategy.Default.WRAPPER 策略来隔离生成的代码。这样,Byte Buddy 为 class 生成了一个新的 class 加载程序,并且单元测试保持可重复。如果将 class 加载到现有的 class 加载程序(如系统 class 加载程序),情况就不会如此。