How can I tell if an object is a Mockito mock?

2020-06-30 04:41发布

问题:

Is it possible to tell in code if a given object is a Mockito mock or not?

The reason I'd like to do this is to return a different error message when a mock is being used. This would be used to suggest to other developers that they should use a pre-prepared mock that is already set to answer calls in a useful way rather than creating the mock themselves.

At the moment the best I have is object.getClass().getName().contains("EnhancerByMockitoWithCGLIB") but this feels hacky.

回答1:

Looks like there is no such API (please raise an issue, it should be!) Fortunately (following your comment below) there is a method in the org.mockito.internal.util package:

import org.mockito.internal.util.MockUtil;

new MockUtil().isMock(obj)

In the future Mockito.isMock() method might be added to public API, see: Issue 313: Provide isMock outside of org.mockito.internal).



回答2:

As a follow up, the Mockito public API now has this method:

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

Which is the result of the issue that @David Wallace raised. The returned object supports the methods 'isMock()' as well as 'isSpy()' and may later be enhanced to provide more mock related information.



标签: java mockito