Java 如何监视具有Mockito注释的类?
我想监视一个有自定义注释的类,但当我尝试获取注释时,它什么都没有 我的班级被定义为:Java 如何监视具有Mockito注释的类?,java,junit,tdd,Java,Junit,Tdd,我想监视一个有自定义注释的类,但当我尝试获取注释时,它什么都没有 我的班级被定义为: @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 Aff
@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
有人知道什么黑客吗
Class clazz = Affiliation.class;
Annotation[] annotations = clazz.getAnnotations();
Annotation annotation = clazz.getAnnotation(Component.class);
它们都应该为您提供类的所有注释和类的特定注释
从你的问题来看,不清楚什么是klass
如果测试的目的仅仅是测试注释是否存在,那么通过这种方式您可以获取注释,然后断言它们 你自己回答了你的问题:
com.req.model.Affiliation$$EnhancerByMockitoWithCGLIB$$123@123
简单地说,不要对嘲笑或间谍做任何假设。将它们用于它们的本意:“测试存根”,为您提供功能(又称行为)
换句话说:您可以创建模拟,以便控制/验证对这些对象进行的方法调用。您以某种方式将模拟注入到您的测试代码中,以获得您想要引起/观察的效果
除此之外的任何事情,比如“希望”Mockito创建的类具有与原始类相同的注释和其他内容:根本不是一个好方法
如上所述:您是在模拟对象以控制其行为,而不是Mockito为了实例化模拟对象而必须生成的相应类的结构组合。谢谢您的回答,但变量klass是由Mockito组成的,当我尝试使用类clazz的方法获取注释时,注释消失了。getAnnotations()返回null。感谢您的回答,我注意到这个问题存在一个设计问题,我认为它需要重构。