Einheit Test-SetupPowerMock ExceptionInInitializerError mit Junit
@RunWith(PowerMockRunner.class)
@PrepareForTest(PGWService.class)
public class PGWServiceTest {
public static final String TEST_CLIENTTRX_ID = "12345";
public static final int TEST_SITE_ID = 0;
public static final long TEST_USER_ID = 12345L;
public static final int TEST_CURRENCY_ID = 1;
public static final String TEST_ACCOUNT_TYPE = "Test account type";
public static final boolean TEST_IS_DEDUPING = false;
public static final byte[] TEST_SSN_CRYPT = new byte[] { 1, 2, 3 };
public static final byte[] TEST_TAX_ID_CRYPT = new byte[] { 1, 2, 3 };
public static final String TEST_SSN_LAST_FOUR = "1234";
public static final String TEST_TAX_ID_LAST_FOUR = "1234";
@Mock
PGWBaseRequest request;
@Mock
PGWClient client;
PGWService pGWService = new PGWService();
PGWGetAccountTaxIDResponse expectedResponse = this
.buildGPWGetAccountIdResponse(TEST_SSN_CRYPT, TEST_TAX_ID_CRYPT,
TEST_SSN_LAST_FOUR, TEST_TAX_ID_LAST_FOUR);
@Before
public void setUp() throws Exception {
PowerMockito.mockStatic(PGWClient.class);
PowerMockito.mockStatic(PGWBaseRequest.class);
PowerMockito.when(PGWClient.getInstance()).thenReturn(client);
PowerMockito
.whenNew(PGWBaseRequest.class)
.withArguments(TEST_CLIENTTRX_ID, TEST_SITE_ID, TEST_USER_ID,
TEST_CURRENCY_ID, TEST_ACCOUNT_TYPE, TEST_IS_DEDUPING)
.thenReturn(request);
PowerMockito.when(client.getTaxIdInformation(request)).thenReturn(
expectedResponse);
}
@Test
public void testGetTaxIdInformationHappyPath() throws PGWException {
PGWGetAccountTaxIDResponse actualResponse = pGWService
.getTaxIdInformation(TEST_CLIENTTRX_ID, TEST_SITE_ID,
TEST_USER_ID, TEST_CURRENCY_ID, TEST_ACCOUNT_TYPE,
TEST_IS_DEDUPING);
Assert.assertEquals(expectedResponse.getSSNLastFour(),
actualResponse.getSSNLastFour());
}
private PGWGetAccountTaxIDResponse buildGPWGetAccountIdResponse(
byte[] ssnCrypt, byte[] taxIdCrypt, String ssnLastFour,
String taxIdLastFour) {
PGWGetAccountTaxIDResponse response = new PGWGetAccountTaxIDResponse();
response.setSSNCrypt(ssnCrypt);
response.setSSNLastFour(ssnLastFour);
response.setTaxIDCrypt(taxIdCrypt);
response.setTaxIDLastFour(taxIdLastFour);
return response;
}
}
Ich habe versucht, das Gerät Test auszuführen, ist es im Test nicht bestanden instanziiert mit dem folgenden Fehler
java.lang.ExceptionInInitializerError bei Sonne. reflect.GeneratedSerializationConstructorAccessor7.newInstance (Unbekannt Quelle) um java.lang.reflect.Constructor.newInstance (Constructor.java:526) um org.objenesis.instantiator.sun.SunReflec tionFactoryInstantiator.newInstance (SunReflectionFactoryInstantiator.java:40) bei org.objenesis.ObjenesisBase.newInstance (ObjenesisBase.java:59) bei org.mockito.internal.creation.jmock.ClassImposterizer.createProxy (ClassImposterizer.java:128) bei org.mockito.internal.creation.jmock.ClassImposterizer.imposterise (ClassImposterizer.java:63) bei org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl (MockCreator.java:111) bei org .powermock.api.mockito.internal.mockcreation.MockCreator.mock (MockCreator.java:60) bei org.powermock.api.mockito.PowerMockito.mock (PowerMockito.java:143) um org.powermock.api. extension.listen er.AnnotationEnabler.standardInject (AnnotationEnabler.java:84) bei org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod (AnnotationEnabler.java:51) bei org.powermock.tests.utils.impl.PowerMockTestNotifierImpl. notifyBeforeTestMethod (PowerMockTestNotifierImpl.java:90) bei org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest (PowerMockJUnit44RunnerDelegateImpl.java:292) bei org.powermock.modules.junit4.internal.impl. PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper (PowerMockJUnit47RunnerDelegateImpl.java:127) unter org.powermock.modules.junit4.internal.impl.PowerMockJ Unit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest (PowerMockJUnit47RunnerDelegateImpl.java:82) bei org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters (PowerMockJUnit44RunnerDelegateImpl.java:282) bei org.junit.internal.runners. MethodRoadie.runTest (MethodRoadie.java:84) bei org.junit.internal.runners.MethodRoadie.run (MethodRoadie.java:49) bei org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod (PowerMockJUnit44RunnerDelegateImpl .java: 207) unter org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods (PowerMockJUnit44RunnerDelegateImpl.java:1 46) bei org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ 1.run (PowerMockJUnit44RunnerDelegateImpl.java:120) bei org.junit.internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) bei org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java:44) bei org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run (PowerMockJUnit44RunnerDelegateImpl.java:118) bei org. powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run (JUnit4TestSuiteChunkerImpl.java:104) unter org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run (AbstractCommonPowerMockRunner.java:53) bei org.powermock.modules.junit4.PowerMockRunner.run (PowerMockRunner.java:53) bei org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) bei org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:675) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382) bei org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:192) Verursacht durch: java.lang.NullPointerException bei bei com.bdd.domain.biz.pgwclient.DynamicConfigListener.getAttributeValue (DynamicConfigListener.java:132) bei com.bdd.domain.biz.pgwclient.PGWCommunicator.init (PGWCommunicator.java:95) bei com.ebay.domain.biz.pgwclient.PGWCommunicator (PGWCommunicator.java.: 83) bei com.bdd.domain.biz.pgwclient.PGWCommunicator.getInstance (PGWCommunicator.java:62) bei com.bdd.domain.biz.pgwclient.PGWClient. (PGWClient.java:117)
Danke für den Vorschlag! Ich habe dies in meinem Code PowerMockito.suppress (PowerMockito.constructor (PGWClient.class)); Immer noch nicht funktioniert Aber wenn ich @Mock PGWClient Client gelöscht. Es wird klappen. Aber ich brauche das wirklich. –
Es sieht aus wie es im @Mock PGWClient Client fehlgeschlagen ist. Als es versucht hat, dieses zu instanziieren, ist es gescheitert. –
Sie Stack-Trace zeigt, dass intern 'PGWCommunicator' über' getInstance() 'erstellt wird. Ich würde vorschlagen, diese Objekterstellung zu unterdrücken oder ihre Instanzmethode statisch zu verspotten. Entschuldigung, das ist kein Superklassenkonstruktor, wie ich dachte. –