У меня есть метод, который я пытаюсь проверить в общественном окончательном классе под названием MyUtil:Почему Whitebox не признает мой частный метод?
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 .la ng.String, java.lang.String] "
Почему Whitebox распознает метод в первом тесте (с нулевым массивом), но не во втором (где у меня есть фактический массив)? Я должен упомянуть, что я включил @Before spy, который я сделал для этого тестового класса (мне это нужно в других тестах), на случай, если это повлияет на проблему.
Зачем вам нужен шпион здесь!?, Просто использовать реальный объект (сделать метод защищенной) –
Также вы, вероятно, следует использовать https://docs.oracle.com/javase/8/docs/api /java/lang/String.html#join-java.lang.CharSequence-java.lang.CharSequence...- –
Это устаревший код. Я тестирую модуль, и я не должен вносить какие-либо изменения. Я использую шпион в других тестах, которые тестируют методы, которые вызывают другие методы в одном классе. – user3897392