在运行时判断一个字段是否被 Spock 模拟或监视的方法
Way to tell at runtime if a field has been mocked or spied by Spock
有没有办法在运行时判断 Java 实例的字段是否已被 Spock 模拟?我想在调试时使用此信息有条件地排除字段被序列化,并使用 GSON 创建字符串表示形式以打印到标准输出。
如果你需要检查的字段没有设置,即returnsnull或其他默认值(true,false,0)则无法区分。
但是您可以检查声明字段的 class 本身是否是 Mock
。检查 class 是否为模拟、间谍或其他对象的最简单(但也可能是最不可靠的)方法是调用 toString()
方法检查是否以 Mock for type 'SomeType'
开头。所有模拟对象都已 toString()
被覆盖。此外 class 名称 - 通过 getClass().getName()
获得 - 将类似于:org.SomeType$$EnhancerByCGLIB$5ccad0
.
有没有办法在运行时判断 Java 实例的字段是否已被 Spock 模拟?我想在调试时使用此信息有条件地排除字段被序列化,并使用 GSON 创建字符串表示形式以打印到标准输出。
如果你需要检查的字段没有设置,即returnsnull或其他默认值(true,false,0)则无法区分。
但是您可以检查声明字段的 class 本身是否是 Mock
。检查 class 是否为模拟、间谍或其他对象的最简单(但也可能是最不可靠的)方法是调用 toString()
方法检查是否以 Mock for type 'SomeType'
开头。所有模拟对象都已 toString()
被覆盖。此外 class 名称 - 通过 getClass().getName()
获得 - 将类似于:org.SomeType$$EnhancerByCGLIB$5ccad0
.