#java #testing #mockito #junit4 #powermockito
Вопрос:
Я использую Junit4 для тестирования внешнего класса java. Я хочу высмеять нижеприведенную строку кода
MySearch mySearch = MyCache.getData(new MyAlgorithm(keyword.trim()), MySearch.class);
Я пытался вот так
@RunWith(PowerMockRunner.class) @PrepareForTest({MyCache.class, MyAlgorithm.class}) public class Test { @BeforeClass public static void setUpBeforeClass() throws Exception { PowerMockito.mockStatic(MyCache.class); MyAlgorithm alg = Mockito.mock(MyAlgorithm.class); PowerMockito.whenNew(MyAlgorithm.class).withArguments("ABC").thenReturn(alg); MySearch mySearch = Mockito.mock(MySearch.class); PowerMockito.when(MyCache.getData(alg,MySearch.class)).thenReturn(mySearch); //... } }
Но все равно я получаю эту ошибку «java.lang.Исключение-ошибка инициализатора»
java.lang.Исключение, инициализирующее ошибку на солнце.отразите.GeneratedSerializationConstructorAccessor6.newInstance(Неизвестный источник) в java.lang.reflect.Конструктор.Новая установка(конструктор.java:423) в org.objectis. instantiator.sun.SunReflectionFactoryInstantiator.Новая установка(SunReflectionFactoryInstantiator.java:45) в org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:73) в org.mockito.внутренний.создание.экземпляр.Объект-установщик.Новая установка(ObjenesisInstantiator.java:14) в org.powermock.api.mockito.переупакована.ClassImposterizer.createProxy(ClassImposterizer.java:143) в организации.powermock.api.mockito.переупакован.ClassImposterizer.imposterise(ClassImposterizer.java:58) в org.powermock.api.mockito.internal.создание макетов.MockCreator.createMethodInvocationControl(MockCreator.java:111) в org.powermock.api.mockito.внутренний.создание макета.Создатель макетов. мок(создатель макетов.java:59) в org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70) на солнце.reflect.NativeMethodAccessorImpl. invoke0(собственный метод) на солнце.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) на солнце.отражать.Делегирование methodaccessorimpl.invoke(делегирование methodaccessorimpl.java:43) в java.lang.reflect.Метод.вызов(Метод.java:498) в org.junit.internal.runners.ClassRoadie.runBefores(ClassRoadie.java:57) в org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) в org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.запустите(PowerMockJUnit44RunnerDelegateImpl.java:122) в org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106) в организации.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) в org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93) в org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756) в организации.eclipse.jdt.внутренний.junit.бегун.RemoteTestRunner.run(RemoteTestRunner.java:452) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Комментарии:
1. Пожалуйста, добавьте полную трассировку стека исключений к вашему вопросу.
2. Это вся трассировка стека? Я бы ожидал, что «вызвано» исключением после того, которое вы показали. Можете ли вы добавить конструктор MyCache к своему вопросу.
Ответ №1:
Убедитесь, что у вас есть хотя бы один метод тестирования. Что-то вроде:
@org.junit.Test public void testMethod() { }
Комментарии:
1. Уже сделал…
2. Ваша настройка выглядит хорошо. Я хотел бы увидеть структуру ваших классов (конструкторов и методов, участвующих в тестировании), чтобы понять проблему. Трассировка стека пока не очень полезна.