我有一个方法,我正试图在一个名为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作为数组),而不识别第二个测试中的方法(其中我有一个实际的数组)?我应该提到我为这个测试类创建的@ the间谍(我需要在其他测试中使用它),以防影响问题。
发布于 2015-08-07 08:40:36
在Eclipse中,我在Whitebox.invokeMethod代码行中看到下面的警告
为了调用varargs方法String[] (Class,String,Object.),应该将String[]类型的参数显式转换为Object[]从Whitebox类型。也可以将其转换为varargs调用的对象。
因此,当我在传递参数时通过类型转换将两个测试方法的代码行更改为Object时,测试用例成功执行。
String retVal = Whitebox.invokeMethod(MyUtil.class, "getStringFromArray", (Object)arrayOfStrings);https://stackoverflow.com/questions/31861799
复制相似问题