Вы должны использовать точный синтаксис , указанный в the answer you linked. Этот синтаксис составляет 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
Таким образом, вы должны использовать синтаксис в третьем тесте.
Примечание: в этом примере используются статические, пустые аргументы; очевидно, что вы должны настроить свой пример на использование Argument Matchers, как обычно для вашего приложения.
Могли бы вы вставить больше кода ваших тестов? Является ли ваш тестовый класс надлежащим образом подготовлен к мошенничеству? –
Дикая догадка, у вас нет '@ PrepareForTest' –