2017-03-08 43 views
0

我有用ASM和Byte Buddy编写的代码,我需要编写测试用例来确保这些实例确实是在运行时创建的。如何验证和编写测试用例来检查ASM/Byte Buddy实例是否在运行时创建

任何想法应该怎么去做?

+0

你的问题不清楚。显然,您生成代码并使用该代码。那么测试代码时有什么障碍,就像其他代码一样? “*确保这些实例确实是在运行时创建的”,你是什么意思?通常,你会注意到它是否发生。如果你没有注意到,确保发生什么事情有什么意义,那没有任何作用?测试策略应该集中于期望的结果,例如,产生的副作用,而不是像实例化是否发生那样的技术细节。 – Holger

+0

我的意思是确保对象确实是在运行时生成的。拉斐尔的回答是我正在寻找的。 –

回答

1

我假设你在问如何验证生成的类。作为一个灵感,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,您可以在创建后与生成的类进行交互。

Byte Buddy提供了用于隔离生成的代码的ClassLoadingStrategy.Default.WRAPPER策略。这样,Byte Buddy为这个类生成了一个新的类加载器,并且单元测试仍然是可重复的。如果一个类被加载到像系统类加载器这样的现有类加载器中,情况就不会如此。

相关问题