【发布时间】:2015-08-25 15:07:00
【问题描述】:
我有一个对象的间谍或模拟对象,我想验证一个方法是否已被调用 问题,我在执行时收到方法名而不是编译时
我想做这样的事情:
SimpleObj mockObject= Mockito.mock(SimpleObj.class);
Class myClass = SimpleObj.class;
Method meth = myClass.getMethod("getGuid");
Mockito.verify(meth.invoke(mockObject));
我已经使用了一种解决方法
MockingDetails mockingDetails = Mockito.mockingDetails(mockObject);
Collection<Invocation> invocations = mockingDetails.getInvocations();
List<String> methodsCalled = new ArrayList<>();
for (Invocation anInvocation : invocations) {
methodsCalled.add(anInvocation.getMethod().getName());
}
assertTrue(methodsCalled.contains("getGuid");
在我使用 PowerMockito 之前它一直有效:
对于标准方法,它可以工作,但如果方法是最终方法,则该方法不存在于mockingDetails.getInvocations()
(但即使不在mockingDetails.getInvocations()
真正的verify(mock).getGuid() 效果很好
所以如果你有任何想法/建议会很高兴
问候
【问题讨论】:
-
这完全是对语法的滥用,但
meth.invoke(Mockito.verify(mockObject))有效吗? -
感谢这个想法不幸的是,它什么也没做:我之前可以调用或不调用 getGuid 方法,但该行似乎没有任何效果
-
meth.invoke(Mockito.verify(mockObject)) 会更正确,就像 Mockito.verify(meth.invoke(mockObject));您传递的不是模拟对象,而是执行结果。虽然我不能让它工作,以太......
-
确保您从 PowerMock 或 Mockito 获取
Class对象。只需使用 SimpleObj.class,它就会看到该方法是最终的,并且不会返回对存根的引用。
标签: reflection mockito powermock verify powermockito