我想窥探一个有自定义注释的类,但是当我尝试获取注释时它没有任何东西。
我的课程定义为:
@FisaEntity(name="TCRB_AFL_AFFILIATION", applicationId="CRB_AFL_REQ", master=true)
@PrimaryKeyFields(names={"CRB-TCRB_AFL_AFFILIATION-AFFILIATION_ID", "CRB-TCRB_AFL_AFFILIATION-AFFIL_SEQ" })
public class Affiliation{
}
当我尝试使用此代码获取注释时:
FisaEntity entityAnnotation = (FisaEntity)klass.getAnnotation(FisaEntity.class);
我的测试运行这个:
Affiliation affiliation = spy(new Affiliation());
调试我的代码,我可以看到我的变量klass是:
com.req.model.Affiliation$$EnhancerByMockitoWithCGLIB$$123@123
有人知道任何黑客攻击吗?
你自己回答了你的问题:
com.req.model.Affiliation$$EnhancerByMockitoWithCGLIB$$123@123
只是不要对嘲笑或间谍做任何假设。将它们用于它们的本意:“测试存根”为您提供功能(也称为行为)。
换句话说:您创建模拟,以便您可以控制/验证对这些对象进行的方法调用。你以某种方式将模拟注入你正在测试的代码中,以获得你想要引起/观察的效果。
除此之外的任何东西,比如“希望”由Mockito创建的类来完成它的魔法具有所有相同的注释和原始类的东西:简直不是一个好的方法。
如上所述:您正在嘲笑控制其行为的对象,而不是Mockito为了实例化模拟对象而必须生成的相应类的结构组合。
Class clazz = Affiliation.class;
Annotation[] annotations = clazz.getAnnotations();
Annotation annotation = clazz.getAnnotation(Component.class);
这两个都应该为您提供类的所有注释和类的特定注释。
从你的问题,目前尚不清楚klass
是什么!
如果您的测试目的仅仅是测试注释是否存在,那么您可以通过这种方式获取注释然后断言它们......