Мне нужно написать тест, издевающийся над экземпляром класса java.lang.Class. Возможно ли это через PowerMock?Можем ли мы создать насмешливый экземпляр java.lang.Class с PowerMock?
я попытался сделать следующее:
PowerMock.createMock(Class.class);
И результат:
java.lang.IllegalAccessError: java.lang.Class
at sun.reflect.GeneratedSerializationConstructorAccessor12.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
at org.powermock.reflect.internal.WhiteboxImpl.newInstance(WhiteboxImpl.java:223)
at org.powermock.reflect.Whitebox.newInstance(Whitebox.java:139)
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2146)
at org.powermock.api.easymock.PowerMock.createMock(PowerMock.java:89)
Согласно документации PowerMock это должно быть возможно, но до сих пор я получаю эту ошибку.
Удалось ли кому-нибудь сделать это?
Редактировать: Зачем мне это нужно? В тестируемом кодировании есть следующее заявление:
if (someObject.getClass().getName().equals(SOME_CLASS_NAME_THAT_I_DONT_HAVE_ACCESS_TO)) { ... do some stuff ... }
мне нужна мой тест, чтобы достичь кодирования внутри «если» и я не могу представить даже высмеивали экземпляр класса, который имеет соответствующее название.
В качестве обходного решения я могу просто создать класс с таким же именем и пакетом в тестах, но он уродлив.
Edit2:
Я попытался также предложения от this link
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.junit.Test;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Test1.class})
public class Test1 {
@Test
public void test() {
PowerMock.createMock(Class.class);
}
}
И результат тот же: "java.lang.IllegalAccessError: java.lang.Class"
Итак, как конечный результат - кажется, что нет способа создать посмеянный экземпляр java.lang.Class
Спасибо
Ну, я могу издеваться над методом getClass(), но ему нужно вернуть экземпляр класса java.lang.Class :) И так как я не могу вернуть насмешливый экземпляр, я не могу еще глумиться с методом getName(). Единственное, что я могу сделать, это просто создать реальный класс с тем же именем и пакетом и вернуть его там - я упомянул об этом как обходном пути. – vap78
@ vap78, я нашел подтверждение моего предположения, [см. Вопрос 3.1] (https://code.google.com/p/powermock/wiki/FAQ). btw, есть [link] (https://code.google.com/p/powermock/source/browse/trunk/modules/module-test/mockito/junit4/src/test/java/samples/powermockito/junit4/ system/SystemClassUserTest.java) к обходу. они предлагают использовать аннотацию [PrepareForTest] (http://powermock.googlecode.com/svn/docs/powermock-1.3.5/apidocs/org/powermock/core/classloader/annotations/PrepareForTest.html). – bsiamionau
@ vap78, сообщите нам, если это помогает – bsiamionau