Java Powermock例外使用Junit初始化错误
单元测试设置Java Powermock例外使用Junit初始化错误,java,spring,junit,powermock,powermockito,Java,Spring,Junit,Powermock,Powermockito,单元测试设置 @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; p
@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.ExceptionInInitializerRor位于
sun.reflect.GeneratedSerializationConstructorAccessor7.newInstance(未知
来源)在
newInstance(Constructor.java:526)位于
org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.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.listener.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)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runbeforesthenTestthenAfter(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.powermockjunit44runnerdelegateinpl.invokeTestMethod(powermockjunit44runnerdelegateinpl.java:207)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.runMethods(powermockjunit44runnerdelegateinpl.java:146)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl$1.run(powermockjunit44runnerdelegateinpl.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.powermockjunit44runnerdelegateinpl.run(powermockjunit44runnerdelegateinpl.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)
原因:处的java.lang.NullPointerException
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)
当您尝试使用PowerMock模拟静态方法时,它会在内部创建该类的实例。所以当你
PowerMockito.mockStatic(PGWClient.class);
该类的新实例是在PowerMock中创建的。此时,您的PGWClient
类默认构造函数调用静态方法进行初始化。这会导致静态模拟失败
你应该检查电源
编辑 从堆栈跟踪可以看出,
PGWClient
正在访问
PGWCommunicator
通过getInstance
方法。里面有一些不想要的行为。你可以
setInstance
方法来替换测试期间返回的对象谢谢你的建议!我在代码PowerMockito.suppress(PowerMockito.constructor(PGWClient.class))中添加了这个;仍然不工作,但如果我删除@Mock PGWClient client。它会起作用的。但我真的需要它看起来在@Mock PGWClient客户端失败了。当它尝试实例化此实例时,失败了。堆栈跟踪显示内部
PGWCommunicator
是通过getInstance()
创建的。我建议抑制此对象创建或静态模拟其实例方法。抱歉,这不是我想的超类构造函数。