Вы должны использовать точный синтаксис, указанный в ответе, который вы связали. Этот синтаксис - doReturn(returnValue).when(Class, String, arguments);
. Ни один из приведенных здесь примеров не использует этот пример.
Вот расширенное объяснение. Я собрал образец тестовой среды, чтобы продемонстрировать это:
Попытка запустить тесты на этом классе:
package org.test.stackoverflow;
import java.util.Collections;
import java.util.List;
public class StaticUtil {
public static void Wrapper() {
getSomethingMethod(null, null, false, Collections.<String>emptyList());
}
private static List<String> getSomethingMethod(Object[] obj,
String[] str, boolean flag, List<String> aList){
System.out.println("I happen!");
return aList;
}
}
Если будет вызван сам метод, мы увидим I happen!
. Если этого не произойдет, мы не будем.
Затем я использую этот тестовый класс:
package org.test.stackoverflow;
import java.util.List;
import org.junit.runner.RunWith;
import org.junit.*;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(org.test.stackoverflow.StaticUtil.class)
public class StaticUtilTest {
Object[] someObjectArray;
String[] someStringArray;
boolean aBoolean;
List<String> someList;
List<String> anotherList;
@Test
public void testWhenClassStringMethod() throws Exception {
System.out.println("Beginning Test when(Class klass, String method name).doReturn(result)");
PowerMockito.spy(StaticUtil.class);
PowerMockito.when(StaticUtil.class, "getSomethingMethod", someObjectArray, someStringArray, aBoolean, someList).thenReturn(anotherList);
System.out.println("End Test when");
}
@Test
public void testDoReturnActualMethod() throws Exception {
PowerMockito.spy(StaticUtil.class);
// This doesn't compile as you've correctly stated
// PowerMockito.doReturn(anotherList).when(StaticUtil.getSomethingMethod(someObjectArray, someStringArray, aBoolean, someList);
}
@Test
public void testDoReturnClassStringMethod() throws Exception {
System.out.println("Beginning Test doReturn().when(Class klass, String method name");
PowerMockito.spy(StaticUtil.class);
PowerMockito.doReturn(anotherList).when(StaticUtil.class, "getSomethingMethod", someObjectArray, someStringArray, aBoolean, someList);
System.out.println("End Test doReturn");
}
}
Итак, если он печатает I happen
, значит, мы использовали неправильный синтаксис. Когда я запускаю эту программу, мы получаем:
Beginning Test when(Class klass, String method name).doReturn(result)
I happen!
End Test when
Beginning Test doReturn().when(Class klass, String method name)
End Test doReturn
Следовательно, вы должны использовать синтаксис в третьем тесте.
Примечание: в этом примере используются статические пустые аргументы; очевидно, вам следует настроить свой пример для использования сопоставителей аргументов как обычно, в зависимости от вашего приложения.
person
durron597
schedule
03.08.2015
@PrepareForTest
- person   schedule 04.08.2015