2012-08-13 15 views
7

मैं जॉप्शनपेन स्थिर तरीकों का नकल करने की कोशिश कर रहा हूं, और जावा.लेंग.विरिफाइरर पर फंस गया हूं। सभी संस्करण वर्तमान हैं, क्योंकि मैंने अभी मॉकिटो के लिए पावरमैक और उनकी सभी निर्भरताओं को डाउनलोड किया है।PowerMock के साथ स्थैतिक सिस्टम क्लास का नकल करने की कोशिश कर रहा है VerifyError

मैं कक्षा को लपेटने और रैपर को सबक्लास करने के लिए पिछले प्रश्न के लिए दिए गए उत्तर का उपयोग नहीं कर सकता - यह सब हमारे आवेदन पर है। मैंने इस बिंदु पर पावरमैक में काफी समय लगाया है, और मैं उत्सव के साथ शुरू नहीं करना चाहता हूं।

क्या इस त्रुटि को हल करने का कोई तरीका है? मैंने निर्देशों में "मॉकिंग स्टेटिक मेथड" और "मॉकिंग सिस्टम क्लासेस" दोनों की कोशिश की है। मैं कहीं भी नहीं जा सकता क्योंकि मैंने जो कुछ किया है वह @RunWith (PowerMockRunner.class) और @PrepareForTest (My.class) है।

मैंने पाया कि मैं जेपीनेल को विस्तारित करने वाले वर्ग के किसी भी संदर्भ के साथ किसी मुद्दे पर इसे कम कर सकता हूं। यहाँ मुद्दा बनाने के लिए एक न्यूनतम परीक्षण है (मैं Boffo पर और पर JPanel PrepareForTest के साथ एक ही अपवाद मिल गया है):

: जब मैं परीक्षण चलाने का प्रयास

import javax.swing.JPanel; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
//@PrepareForTest(JPanel.class) 
@PrepareForTest(TestCase.Boffo.class) 
public class TestCase { 

    @SuppressWarnings("serial") 
    public static class Boffo extends JPanel {} 

    @Test 
    public void test() throws Exception { 
     new Boffo(); 
    } 
} 

यहाँ अपवाद मैं मिलता है

java.lang.VerifyError: (class: javax/swing/plaf/metal/MetalLookAndFeel, method: getLayoutStyle signature:()Ljavax/swing/LayoutStyle;) Wrong return type in function 
    at javax.swing.UIManager.setLookAndFeel(Unknown Source) 
    at javax.swing.UIManager.initializeDefaultLAF(Unknown Source) 
    at javax.swing.UIManager.initialize(Unknown Source) 
    at javax.swing.UIManager.maybeInitialize(Unknown Source) 
    at javax.swing.UIManager.getUI(Unknown Source) 
    at javax.swing.JPanel.updateUI(Unknown Source) 
    at javax.swing.JPanel.<init>(Unknown Source) 
    at javax.swing.JPanel.<init>(Unknown Source) 
    at javax.swing.JPanel.<init>(Unknown Source) 
    at com.package.TestCase$Boffo.<init>(TestCase.java:17) 
    at com.package.TestCase.test(TestCase.java:21) 
    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.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:46) 
    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

https://groups.google.com/forum/?fromgroups#!topic/powermock/GgUjp6_x3GQ%5B1-25%5D –

+0

देखें मैंने पूरा धागा पढ़ा - मैंने जो देखा वह था कि उत्तर देने से पहले, कोई विषय को किसी अन्य मुद्दे में बदल दिया। अगर यहां कोई जवाब है, तो कृपया मुझे इसे इंगित करें। यह उन कई स्थानों में से एक है जहां मैंने सवाल देखा लेकिन जवाब नहीं दिया। – orbfish

उत्तर

12

यहाँ एक साफ वैकल्पिक हल/समाधान है कि मेरा एक सहयोगी आज की खोज की है।

संपादित करें: बस प्रश्न को फिर से पढ़ें और चूंकि आप जॉप्शनपेन को नकल करने की कोशिश कर रहे हैं, मुझे यकीन नहीं है कि इससे मदद मिलेगी, लेकिन हो सकता है कि आप बहिष्करण पैटर्न के साथ खेल सकें।

+0

आयात org.powermock.core.classloader.annotations.PowerMockIgnore; इसके लिए आयात है। – k1eran

3

मुझे नहीं पता कि वास्तव में यह VerifyError क्यों फेंकता है, लेकिन आप क्लास को तुरंत चालू करने से पहले नकली लुक एंडफिल सेट करके इसे दूर कर सकते हैं। बस परीक्षण वर्ग के लिए एनोटेशन @PowerMockIgnore("javax.swing.*") जोड़ सकते हैं और PowerMock प्रणाली classloader लिए समस्या पैदा करने वाले वर्गों की लोडिंग स्थगित होगा:

public static class FakeLookAndFill extends BasicLookAndFeel { 
    @Override 
    public String getName() { 
     return "FakeLookAndFill"; 
    } 

    @Override 
    public String getID() { 
     return "FakeLookAndFill"; 
    } 

    @Override 
    public String getDescription() { 
     return "FakeLookAndFill"; 
    } 

    @Override 
    public boolean isNativeLookAndFeel() { 
     return false; 
    } 

    @Override 
    public boolean isSupportedLookAndFeel() { 
     //note it returns true 
     return true; 
    } 
} 

@Before 
public void setUp() throws Exception { 
    UIManager.setLookAndFeel(new FakeLookAndFill()); 
} 
संबंधित मुद्दे