Невозможно частично смоделировать статический метод с PowerMockito
Я должен издеваться над статической функцией с именем toBeMockedFunction в классе Util. Этот метод вызывается из toBeUnitTested, который является открытым статическим методом void. Я хочу, чтобы BeMockedFunction ничего не делал. Я перепробовал много подходов (фрагмент из 2), которые были частично издевательскими и безрезультатными, но я не смог добиться успеха.
Пожалуйста, подскажите, что я делаю не так.
public class Util {
// Some code
public static void toBeUnitTested(CustomObject cb, CustomObject1 cb1, List<CustomObject2> rows, boolean delete) {
// some code
toBeMockedFunction(cb, "test", "test");
}
public static CustomObject toBeMockedFunction(CustomObject cb, String str1) {
// some code
}
}
И ниже мой класс джунит
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Util.class})
public class UtilTest {
@Test
public void Test1() {
PowerMockito.spy(Util.class);
//mock toBeMocked function and make it do nothing
PowerMockito.when(PowerMockito.spy(Util.toBeMockedFunction((CustomObject)Mockito.anyObject(), Mockito.anyString()))).thenReturn(null);
Util.toBeUnitTested(cb, "test", "test");
}
}
Approach2
PowerMockito.mockStatic(Util.class); PowerMockito.when(Util.toBeUnitTested((CustomObject)Mockito.anyObject(),Mockito.anyString())).thenCallRealMethod(); Util.toBeUnitTested(cb, "test", "test");
1 ответ
Это пример того, как можно сделать это:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Util.class})
public class UtilTest {
@Test
public void Test1() {
PowerMockito.spy(Util.class);
PowerMockito.doReturn(null).when(Util.class, "toBeMockedFunction", Mockito.any(CustomObject.class), Mockito.anyString(), Mockito.anyString());
List<CustomObject2> customObject2List = new ArrayList<>();
customObject2List.add(new CustomObject2());
Util.toBeUnitTested(new CustomObject(), new CustomObject1(), customObject2List, true);
}
}
Обратите внимание, что код вашего OP не компилируется. метод toBeMockedFunction(CustomObject cb, String str1)
получает только 2 параметра, а вы звоните с 3: toBeMockedFunction(cb, "test", "test");
, Как вы могли видеть, я добавил последний в сигнатуру метода.
Надеюсь, поможет