Unité de configuration de testPowermock ExceptionInInitializerError avec 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;
}
}
J'ai essayé de lancer le test unitaire, il a échoué dans le test instancier avec l'erreur suivante
de java.lang.ExceptionInInitializerError au soleil. reflect.GeneratedSerializationConstructorAccessor7.newInstance (Inconnu Source) au java.lang.reflect.Constructor.newInstance (Constructor.java:526) at org.objenesis.instantiator.sun.SunReflec tionFactoryInstantiator.newInstance (SunReflectionFactoryInstantiator.java:40) à org.objenesis.ObjenesisBase.newInstance (ObjenesisBase.java:59) à org.mockito.internal.creation.jmock.ClassImposterizer.createProxy (ClassImposterizer.java:128) à org.mockito.internal.creation.jmock.ClassImposterizer.imposterise (ClassImposterizer.java:63) à org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl (MockCreator.java:111) à org .powermock.api.mockito.internal.mockcreation.MockCreator.mock (MockCreator.java:60) à org.powermock.api.mockito.PowerMockito.mock (PowerMockito.java:143) à org.powermock.api. extension.listen er.AnnotationEnabler.standardInject (AnnotationEnabler.java:84) à org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod (AnnotationEnabler.java:51) à org.powermock.tests.utils.impl.PowerMockTestNotifierImpl. notifyBeforeTestMethod (PowerMockTestNotifierImpl.java:90) à org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest (PowerMockJUnit44RunnerDelegateImpl.java:292) à org.powermock.modules.junit4.internal.impl. PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper (PowerMockJUnit47RunnerDelegateImpl.java:127) au org.powermock.modules.junit4.internal.impl.PowerMockJ Unit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest (PowerMockJUnit47RunnerDelegateImpl.java:82) à org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters (PowerMockJUnit44RunnerDelegateImpl.java:282) à org.junit.internal.runners. MethodRoadie.runTest (MethodRoadie.java:84) à org.junit.internal.runners.MethodRoadie.run (MethodRoadie.java:49) à org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod (PowerMockJUnit44RunnerDelegateImpl .java: 207) au org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods (PowerMockJUnit44RunnerDelegateImpl.java:1 46) à org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl 1.run $ (PowerMockJUnit44RunnerDelegateImpl.java:120) à org.junit.internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) à org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java:44) à org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run (PowerMockJUnit44RunnerDelegateImpl.java:118) à org. powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run (JUnit4TestSuiteChunkerImpl.java:104) à org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run (AbstractCommonPowerMockRunner.java:53) à org.powermock.modules.junit4.PowerMockRunner.run (PowerMockRunner.java:53) à org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) à org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) à org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459) à org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:675) à org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382) à org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:192) causés par: java.lang.NullPointerException à au com.bdd.domain.biz.pgwclient.DynamicConfigListener.getAttributeValue (DynamicConfigListener.java:132) à com.bdd.domain.biz.pgwclient.PGWCommunicator.init (PGWCommunicator.java:95) à com.ebay.domain.biz.pgwclient.PGWCommunicator (PGWCommunicator.java.: 83) à com.bdd.domain.biz.pgwclient.PGWCommunicator.getInstance (PGWCommunicator.java:62) à com.bdd.domain.biz.pgwclient.PGWClient. (PGWClient.java:117)
Merci pour la suggestion! J'ai ajouté ceci dans mon code PowerMockito.suppress (PowerMockito.constructor (PGWClient.class)); Toujours ne fonctionne pas Mais si j'ai supprimé le client @Mock PGWClient. Ça va marcher. Mais j'ai vraiment besoin de celui-là –
Il semble qu'il a échoué dans le client @Mock PGWClient. Quand il a essayé d'instancier celui-ci, il a échoué. –
Vous empilez la trace montre que 'PGWCommunicator' est créé en interne' getInstance() '. Je suggère de supprimer cette création d'objet ou de se moquer de sa méthode d'instance. Désolé, ce n'est pas un constructeur de superclasse comme je le pensais. –