是否有可能在代码中判断一个给定的对象是否是 Mockito 模拟?
我这样做的原因是当使用 mock 时返回一个不同的错误消息。这将用于建议其他开发人员使用预先准备好的模拟,该模拟已经设置为以有用的方式响应调用,而不是自己创建模拟。
目前我最好的是 object.getClass().getName().contains("EnhancerByMockitoWithCGLIB"),但是这个感觉很粗糙。
object.getClass().getName().contains("EnhancerByMockitoWithCGLIB")
似乎没有这样的 API (请提出一个问题,它应该!)幸运的是(按照你下面的评论)在 org.mockito.internal.util包中有一个方法:
org.mockito.internal.util
import org.mockito.internal.util.MockUtil; new MockUtil().isMock(obj)
在将来,Mockito.isMock()方法可能会被添加到公共 API 中,请参见: 问题313: 在 org.modito.Internal 之外提供 isMock)。
Mockito.isMock()
作为后续工作,Mockito 公共 API 现在有了 这种方法:
MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect)
这就是“大卫 · 华莱士”提出的问题的结果。返回的对象支持方法 isMock()和 isSpy()以及其他一些提供附加模拟信息的方法。
isMock()
isSpy()
如果你正在使用 io.lockk.mock,那么你可以这样做:
isMockKMock()