我有一个方法,我试图在一个名为 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 spy(我在其他测试中需要它),以防万一影响问题。