我想监视一个具有自定义批注的类,但是当我尝试获取批注时却没有任何内容。
我的班级定义为:
@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
有人知道任何骇客吗?
答案 0 :(得分:1)
Class clazz = Affiliation.class;
Annotation[] annotations = clazz.getAnnotations();
Annotation annotation = clazz.getAnnotation(Component.class);
这两个都应为您提供该类的所有注释以及该类的特定注释。
根据您的问题,不清楚klass
是什么!
如果测试的目的仅仅是测试注释是否存在,则可以通过这种方式获取注释,然后声明它们...
答案 1 :(得分:1)
您自己回答了问题:
com.req.model.Affiliation$$EnhancerByMockitoWithCGLIB$$123@123
根本不对模拟或间谍做任何假设。使用它们的含义是:为您提供功能(即行为)的“测试存根”。
换句话说:创建模拟,以便可以控制/验证在这些对象上进行的方法调用。您以某种方式将模拟注入到要测试的代码中,以达到要引起/观察的效果。
除此之外,还有其他任何事情,例如“希望”,由Mockito创建的用于执行其魔术的类都具有与原始类相同的注释和其他内容:根本不是一种好方法。
如前所述:您是在模拟对象以控制其行为,而不是Mockito为实例化模拟对象而必须生成的相应类的结构组成。