單元測試設置Powermock ExceptionInInitializerError,使用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;
}
}
我試圖運行單元測試,它的測試失敗實例,出現以下錯誤
java.lang.ExceptionInInitializerError在 的太陽。 reflection.GeneratedSerializationConstructorAccessor7.newInstance(Unknown Source)at 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) 在 有機(PowerMockito.java:143) 在 org.powermock.api上的.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60) 。 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) at 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) at 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) 在 有機powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:104) at 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)在在 com.bdd.domain.biz.pgwclient.DynamicConfigListener.getAttributeValue顯示java.lang.NullPointerException:在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 引起(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)
感謝您的建議!我在我的代碼PowerMockito.suppress(PowerMockito.constructor(PGWClient.class))中添加了這個; 仍然不能正常工作 但是,如果我刪除了@Mock PGWClient客戶端。它會工作。但我真的需要那個 –
它看起來像在@Mock PGWClient客戶端失敗。當它嘗試實例化這個時,它失敗了。 –
堆棧跟蹤顯示內部'PGWCommunicator'是通過'getInstance()'創建的。我會建議禁止這個對象創建或靜態模擬其實例方法。對不起,這不是我想的超類構造函數。 –