private boolean isEmpty(Object[] array) {
if (array == null || array.length == 0)
return true;
for (int i = 0; i < array.length; i++) {
if (array[i] != null)
return false;
}
return true;
}
@Test
public void testIsEmpty() {
//where is an instance of the class whose method isEmpty() I want to test.
try {
Object[] arr = null;
assertTrue((Boolean)(Whitebox.invokeMethod(where, "isEmpty", new Class<?>[]{Object[].class}, arr)));
arr = new Object[0];
assertTrue((Boolean)(Whitebox.invokeMethod(where, "isEmpty", new Class<?>[]{Object[].class}, arr)));
arr = new Object[]{null, null};
assertTrue((Boolean)(Whitebox.invokeMethod(where, "isEmpty", new Class<?>[]{Object[].class}, arr)));
arr = new Object[]{1, 2};
assertFalse((Boolean)(Whitebox.invokeMethod(where, "isEmpty", new Class<?>[]{Object[].class}, arr)));
} catch (Exception e) {
fail(e.getMessage());
}
}
问题:java.lang.AssertionError:参数数量错误
研究: 1.最初,我尝试过:invokeMethod(Objecttested, String methodToExecute, Object... arguments)
第 2 次、第 3 次和第 4 次调用方法 () 失败。(错误:未找到给定参数的方法)
我认为这可能是由于 PowerMock 没有推断出正确的方法的问题;因此,我切换到:invokeMethod(Objecttested, String methodToExecute, Class[] argumentTypes, Object... arguments)
父类有一个 isEmpty() 方法,该方法在子类中被完全重复的 isEmpty() 方法覆盖。(遗留代码)没有其他不同签名的 isEmpty() 方法。有许多采用参数的方法,但没有其他采用 Object[] 的方法(例如,没有采用 Integer[] 作为参数的方法)。
在上面的第二个 assertTrue 语句之前,更改为 arr = new Object[1] 会使该断言语句通过。
任何帮助是极大的赞赏。谢谢!