2013-03-27 6 views
1

남자 질문 : 다른 정적 최종 클래스를 정의한 정적 최종 클래스를 조롱하는 방법은 무엇입니까?java.lang.NoSuchMethodError powermock

문제점 설명 : 마지막 클래스 인 ApplianceRelationshipUtils.java에 단위 테스트 케이스를 작성하고이 최종 클래스 인 ApplianceRelationshipUtils.java에 항상 다른 정적 클래스 ApplianceUtilities.java를 호출하십시오. 그래서 나는이 같은 정적 클래스 ApplianceUtilities.java 모의 powermock를 사용해야합니다 : 그래서

private static final IMesUtils m_mesUtils = new MesUtils(); 
private static final IEndpointUtilities m_endpointUtils = new DefaultEndpointUtilities(m_mesUtils); 
private static final ICasUtilities m_casUtils = new DefaultCasUtilities(m_endpointUtils); 
private static final IHAApplianceUtilities m_haUtils = new HAApplianceUtils(m_endpointUtils, m_casUtils); 

난을 실행

// mock the class for one method only 
    PowerMock.mockStaticPartialNice(ApplianceUtilities.class,"getApplianceVersion"); 

을하지만 ApplianceUtilities.java는이 같은 많은 정적 최종 클래스의 사용을 정의에 testcase는 아래와 같이 예외를 던질 것입니다.

java.lang.NoSuchMethodError: com.ibm.usmi.services.updates.util.RestartUtilities.<init>(Lcom/ibm/usmi/services/updates/util/IRcsUtilities;Lcom/ibm/usmi/services/updates/util/MesUtils;Lcom/ibm/usmi/services/updates/util/IUpdateUtils;)V 
at com.ibm.vmi.updates.appliance.util.HAApplianceUtils.<init>(HAApplianceUtils.java:222) 
at com.ibm.vmi.updates.appliance.util.ApplianceUtilities.<clinit>(ApplianceUtilities.java:89) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at net.sf.cglib.proxy.Enhancer.setCallbacksHelper(Enhancer.java:616) 
at net.sf.cglib.proxy.Enhancer.setThreadCallbacks(Enhancer.java:609) 
at net.sf.cglib.proxy.Enhancer.registerCallbacks(Enhancer.java:578) 
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:194) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:60) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:98) 
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2214) 
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163) 
at org.powermock.api.easymock.PowerMock.createMock(PowerMock.java:76) 
at org.powermock.api.easymock.PowerMock.createPartialMock(PowerMock.java:762) 
at com.ibm.vmi.updates.appliance.relationship.ApplianceRelationshipUtilsTest.test_validateApplianceReqs(ApplianceRelationshipUtilsTest.java:77) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:312) 
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86) 
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:296) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:284) 
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84) 
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:209) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:148) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:122) 
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) 
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:120) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102) 
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:42) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
+0

어떤 PowerMock 번들을 사용하고 있습니까? 이 페이지에서 참조한 것처럼 : http://code.google.com/p/powermock/wiki/GettingStarted – Magnilex

답변

-1

@SuppressStaticInitializationFor를 시도해보고 도움이되는지 확인하십시오. https://code.google.com/p/powermock/wiki/SuppressUnwantedBehavior

+0

이것은 링크가 나쁜 이유의 완벽한 예입니다. PowerMock이 GitHub로 이동했는데 이제이 링크가 작동하지 않습니다. 이것은 위선적 인 내용이지만 새로운 링크는 다음과 같습니다. https://github.com/jayway/powermock/wiki/SuppressUnwantedBehavior – CodyEngel

관련 문제