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。感谢您的回答,我注意到这个问题存在一个设计问题,我认为它需要重构。