Получение ‘exceptioninitializererror’ во время насмешек над конструктором arg

#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. Ваша настройка выглядит хорошо. Я хотел бы увидеть структуру ваших классов (конструкторов и методов, участвующих в тестировании), чтобы понять проблему. Трассировка стека пока не очень полезна.