java - 如何使用 Mockito 监视具有注释的类?

标签 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

有人知道任何黑客吗?

最佳答案

您自己回答了您的问题:

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

不要对模拟或 spy 做出任何假设。将它们用于它们的用途:为您提供功能(也称为行为)的“测试 stub ”。

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

除此之外,比如“希望”Mockito 创建的类具有与原始类相同的注释和其他内容:这根本不是一个好方法。

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

关于java - 如何使用 Mockito 监视具有注释的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53733942/

相关文章:

java - 模拟 Sftp 类跳过方法调用

unit-testing - TDD 中驱动程序和 stub 之间的区别

django - 在 Django 中测试 "different layers"的最佳实践是什么?

java - Spring Boot 应用程序在运行时可以运行,但在测试时会崩溃

java - 如何使用 Mersenne Twister RNG 随机数生成器

java - this::instance 方法在 java 8 中用作方法参数有什么用

java - Spring - 实体类应该包含除 getX 和 setX 之外的方法吗?

java - matlab中大小的java表示是什么

java - junit日志杂乱,为什么会重复语句?

java - 基于应用参数 JUnit 验证行为