如何窥探具有Mockito注释的班级?

问题描述 投票:2回答:2

我想窥探一个有自定义注释的类,但是当我尝试获取注释时它没有任何东西。

我的课程定义为:

@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

有人知道任何黑客攻击吗?

java junit tdd
2个回答
1
投票

你自己回答了你的问题:

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

只是不要对嘲笑或间谍做任何假设。将它们用于它们的本意:“测试存根”为您提供功能(也称为行为)。

换句话说:您创建模拟,以便您可以控制/验证对这些对象进行的方法调用。你以某种方式将模拟注入你正在测试的代码中,以获得你想要引起/观察的效果。

除此之外的任何东西,比如“希望”由Mockito创建的类来完成它的魔法具有所有相同的注释和原始类的东西:简直不是一个好的方法。

如上所述:您正在嘲笑控制其行为的对象,而不是Mockito为了实例化模拟对象而必须生成的相应类的结构组合。


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

这两个都应该为您提供类的所有注释和类的特定注释。

从你的问题,目前尚不清楚klass是什么!

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

© www.soinside.com 2019 - 2024. All rights reserved.