Как издеваться только над одним статическим методом и тестировать другой
@Mocked Provider provider;
public static class Provider {
public static List<Integer> getStaticList() {
return new ArrayList<>();
}
public static List<Integer> test() {
return getStaticList();
}
}
@Test
public void testStatic() {
ArrayList<Object> list = new ArrayList<>();
list.add(1);
new Expectations() {
{
Provider.getStaticList();
result = list;
}
};
assertThat(Provider.test(), JUnitMatchers.hasItem(1));
}
Я хочу издеваться (с помощью JMockit)над одним статическим методом, который вызывается внутри другого. Как я могу это сделать? Вышеприведенный тест не проходит. Настоящий поставщик.метод тестирования никогда не вызывается.
2 ответа:
Вы можете использовать частичное издевательство:
@Test public void testStatic() { new Expectations(Provider.class) {{ Provider.getStaticList(); result = 1; }}; List<Integer> test = Provider.test(); assertTrue(test.contains(1)); }
(без Поля"
@Mocked Provider
" для приведенного выше теста.)
Приведенный ниже код изменяет поведение только статического метода
testMethod
, не затрагивая другие статические методы.import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest({Foo.class }) public class Snipets { @Test public void hoge() throws Exception { PowerMockito.spy(Foo.class); PowerMockito.when(Foo.class, "testMethod").thenReturn("dummy"); String actual = Foo.testMethod(); assertEquals("dummy", actual); } }
Фу.java
public class Foo { public static String testMethod() { return "foo"; } }
Источник: https://gist.github.com/mid0111/8859159