为什么Whitebox不能识别我的私有方法?

时间:2015-08-06 17:08:51

标签: java unit-testing powermockito white-box

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

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.MethodNotFoundException:找不到名称为'getStringFromArray'的参数类型的方法:[java.lang.String,java.lang.String,java.lang.String]”

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

1 个答案:

答案 0 :(得分:2)

在Eclipse编辑器中,我在Whitebox.invokeMethod代码行中看到以下警告

  

类型String []的参数应该显式地转换为Object [],以便从类型Whitebox调用varargs方法invokeMethod(Class,String,Object ...)。也可以将其转换为Object以进行varargs调用

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

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