gpt4 book ai didi

reflection - mockito 如何使用方法名和反射进行验证

转载 作者:行者123 更新时间:2023-12-04 12:57:43 28 4
gpt4 key购买 nike

我有一个对象的 spy 或模拟,我想验证一个方法是否已被调用
问题,我在执行时收到方法名而不是编译时

我想做类似的事情:

  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 才有效:
对于标准方法,它有效,但如果方法是 final方法,则该方法不存在于 mockingDetails.getInvocations() 中。
(但即使不存在于 mockingDetails.getInvocations()真实 verify(mock).getGuid()工作得很好

因此,如果您有任何想法/建议,我会很高兴

问候

最佳答案

这对我使用常规 Mockito 有效(我用它来验证 android.bluetooth.BluetoothGatt 中的隐藏方法“refresh()”是否被调用:

private void assertMethodInvoked(@NonNull Object object,
@NonNull String methodName,
@NonNull VerificationMode verificationMode) throws Exception {
final Method method = object.getClass().getDeclaredMethod(methodName);
final Object verify = verify(object, verificationMode);
method.invoke(verify);
}

关于reflection - mockito 如何使用方法名和反射进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207623/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com