如何判断一个对象是否是 Mockito 模拟?

是否有可能在代码中判断一个给定的对象是否是 Mockito 模拟?

我这样做的原因是当使用 mock 时返回一个不同的错误消息。这将用于建议其他开发人员使用预先准备好的模拟,该模拟已经设置为以有用的方式响应调用,而不是自己创建模拟。

目前我最好的是 object.getClass().getName().contains("EnhancerByMockitoWithCGLIB"),但是这个感觉很粗糙。

19281 次浏览

似乎没有这样的 API (请提出一个问题,它应该!)幸运的是(按照你下面的评论)在 org.mockito.internal.util包中有一个方法:

import org.mockito.internal.util.MockUtil;


new MockUtil().isMock(obj)

在将来,Mockito.isMock()方法可能会被添加到公共 API 中,请参见: 问题313: 在 org.modito.Internal 之外提供 isMock)

作为后续工作,Mockito 公共 API 现在有了 这种方法:

MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect)

这就是“大卫 · 华莱士”提出的问题的结果。返回的对象支持方法 isMock()isSpy()以及其他一些提供附加模拟信息的方法。

如果你正在使用 io.lockk.mock,那么你可以这样做:

isMockKMock()