为什么白盒无法识别我的私有方法?



我有一个方法,我试图在一个名为MyUtil的公共final类中进行测试:

private static String getStringFromArray(String[] array) {
    String tempString = "";
    if (array != null && array.length > 0) {
      for (int i = 0; i < array.length - 1; i++) {
        tempString += array[i] + ",";
      }
      tempString += array[array.length - 1];
    }
    return tempString;
}

我已经设置了两个测试方法,我使用Whitebox来调用这个私有方法:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyUtil.class)
public class MyUtilTests {
@Before
public void setUp() {
   PowerMockito.spy(MyUtil.class);
}
  @Test
  public void getStringFromArrayReturnsEmptyStringIfArrayIsNullTest() throws    Exception {
    String[] arrayOfStrings = null;
    String retVal = Whitebox.invokeMethod(MyUtil.class, "getStringFromArray", arrayOfStrings);
    assertEquals("", retVal);
  }
  @Test
  public void getStringFromArrayReturnsElementsSeparatedByCommasTest() throws Exception {
    String[] arrayOfStrings = new String[]{"A", "B", "C"};
    String retVal = Whitebox.invokeMethod(MyUtil.class, "getStringFromArray", arrayOfStrings);
    assertEquals("A,B,C", retVal);
  }
}

当我运行这些测试时,我得到一个错误消息说:

" org.powermock.reflect.exceptions。没有找到名称为"getStringFromArray"的方法,参数类型为:[java.lang. js]。字符串,. lang。字符串,java.lang.String]"

为什么Whitebox在第一个测试(以null作为数组)中识别方法,但在第二个测试(我有一个实际的数组)中不识别方法?我应该提到的是,我包括了@Before间谍,我为这个测试类(我需要在其他测试),以防影响问题。

在Eclipse编辑器中,我在Whitebox中看到下面的警告。

String[]类型的参数应该显式地转换为Object[],以便从Whitebox类型调用可变参数方法invokeMethod(Class, String, Object…)。对于varargs调用

,也可以将其强制转换为Object

因此,当我通过传递参数时将两个测试方法的类型强制转换为Object更改为下面的代码行时,测试用例成功执行。

 String retVal = Whitebox.invokeMethod(MyUtil.class, "getStringFromArray", (Object)arrayOfStrings);

相关内容

  • 没有找到相关文章

最新更新