gpt4 book ai didi

java - PowerMock:正确使用 Whitebox.invokeMethod(...) 将 Object[] 作为参数的方法

转载 作者:行者123 更新时间:2023-11-30 07:21:42 26 4
gpt4 key购买 nike

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(对象测试,String methodToExecute,对象...参数)

第二次、第三次和第四次 invokeMethod() 失败。 (错误:找不到给定参数的方法)

我认为这可能是由于 PowerMock 无法推断出正确方法的问题;因此,我切换到: invokeMethod(对象测试, String methodToExecute, Class[] argumentTypes, Object... arguments)

  1. 父类有一个 isEmpty() 方法,该方法在子类中被完全复制的 isEmpty() 方法覆盖。 (遗留代码)没有其他不同签名的 isEmpty() 方法。有许多方法采用参数,但没有其他采用 Object[] 的方法(例如,没有采用 Integer[] 作为参数的方法)。

  2. 在上面的第二个 assertTrue 语句之前,更改为 arr = new Object[1] 使该断言语句通过。

非常感谢任何帮助。谢谢!

最佳答案

认为它应该通过将参数转换为 Object 来工作,以使 Java 将其作为单个参数,而不是与 Object...< 相对应的参数数组:

Whitebox.invokeMethod(where, "isEmpty", new Class<?>[]{Object[].class}, (Object) arr);

测试用例:

public static void main(String[] args) {
foo(new Object[] {"1", "2"}); // prints arg = 1\narg=2
foo((Object) (new Object[] {"1", "2"})); // prints args = [Ljava.lang.Object;@969cccc
}

private static void foo(Object... args) {
for (Object arg : args) {
System.out.println("arg = " + arg);
}
}

关于java - PowerMock:正确使用 Whitebox.invokeMethod(...) 将 Object[] 作为参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185784/

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