如何监视具有Mockito注释的班级?

时间:2018-12-11 23:31:34

标签: 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 Affiliation{

}

当我尝试使用以下代码获取注释时:

FisaEntity entityAnnotation = (FisaEntity)klass.getAnnotation(FisaEntity.class);

我的测试运行如下:

Affiliation affiliation = spy(new Affiliation());

调试我的代码,我可以看到变量klass是:

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

有人知道任何骇客吗?

2 个答案:

答案 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为实例化模拟对象而必须生成的相应类的结构组成