如何监视 class 有 Mockito 注释的人?

How to spy a class who has an Annotation with Mockito?

我想监视一个 class 有自定义注释的人,但是当我尝试获取注释时它什么也没有。

我的class定义为:

@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$3@123

有人知道任何技巧吗?

Class clazz = Affiliation.class;
Annotation[] annotations = clazz.getAnnotations();
Annotation annotation = clazz.getAnnotation(Component.class);

这些都应该为您提供 class 的所有注释和 class 的特定注释。

从你的问题来看,不清楚klass是什么!

如果您的测试目的仅仅是为了测试注释是否存在,那么您可以通过这种方式获取注释然后断言它们...

您自己回答了您的问题:

com.req.model.Affiliation$$EnhancerByMockitoWithCGLIB$3@123

不要对模拟或间谍做出任何假设。将它们用于它们的用途:"test stubs" 为您提供 功能(又名行为)。

换句话说:您创建模拟,以便您可以 control/verify 对这些对象进行方法调用。您以某种方式将模拟注入被测代码以获得您想要的效果 cause/observe.

除此之外的任何内容,例如 "hoping" Mockito 创建的 class 具有所有相同的注释和原始 class 的其他内容:根本不是一个好方法.

如前所述:您正在模拟对象以控制它们的行为,而不是 Mockito 必须生成的相应 class 的 结构组合 以实例化模拟对象对象。