2010-10-25 10 views
23

मैं एक परीक्षण का मामला है कि सफलतापूर्वक से पहले भाग गया से निम्न अपवाद हो रही है, लेकिन अब यह इस अपवाद फेंकता है:JUnit java.lang.NoSuchMethodError: junit.framework.ComparisonFailure.getExpected() Ljava/लैंग/स्ट्रिंग

java.lang.NoSuchMethodError: junit.framework.ComparisonFailure.getExpected()Ljava/lang/String; 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener.testFailure(JUnit4TestListener.java:63) 
    at org.junit.runner.notification.RunNotifier$4.notifyListener(RunNotifier.java:100) 
    at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:41) 
    at org.junit.runner.notification.RunNotifier.fireTestFailure(RunNotifier.java:97) 
    at org.junit.internal.runners.JUnit38ClassRunner$OldTestClassAdaptingListener.addError(JUnit38ClassRunner.java:41) 
    at org.junit.internal.runners.JUnit38ClassRunner$OldTestClassAdaptingListener.addFailure(JUnit38ClassRunner.java:64) 
    at junit.framework.TestResult.addFailure(TestResult.java:46) 
    at junit.framework.TestResult.runProtected(TestResult.java:127) 
    at junit.framework.TestResult.run(TestResult.java:109) 
    at junit.framework.TestCase.run(TestCase.java:118) 
    at junit.framework.TestSuite.runTest(TestSuite.java:208) 
    at junit.framework.TestSuite.run(TestSuite.java:203) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
    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

आप लाइन जहां यह विफल हो रहा है पर कोड पोस्ट कर सकते हैं: एंड्रॉयड परियोजना के लिए ये ऐसा एक त्रुटि हो सकती थी? – hvgotcodes

+0

आप किस जूनिट का उपयोग कर रहे हैं? ऐसा लगता है कि दूसरों ने इसे 4.5 के साथ देखा है। –

+0

दुर्भाग्य से मैं पूरी टेस्ट विधि पोस्ट नहीं कर सकता क्योंकि इसमें कुछ व्यावसायिक तर्क शामिल हैं। हालांकि दावे के बारे में कुछ भी असामान्य नहीं है, केवल सरल assertEquals()। स्टैक ट्रेस मुझे टेस्ट क्लास से एक विशिष्ट रेखा नहीं देता है जिस पर यह असफल रहा है। परीक्षण पहले ठीक चला गया, इसलिए मुझे यकीन नहीं है कि यह अपवाद क्यों फेंक रहा है। मैंने पहले कभी इस अपवाद को नहीं देखा है। – TheWolf

उत्तर

20

junit.framework.ComparisonFailure पर getExpected() विधि केवल JUnit 3.8.2 (याद रखें, जबकि JUnit 4 org.junit का उपयोग करता junit.framework पैकेज, JUnit 3.8 से है) में जोड़ा गया है। विधि 3.8.1 में नहीं थी, जो अभी भी 3.x का सबसे आम संस्करण है।

मुझे लगता है कि विधि JUnit 4 टूलिंग के लिए आसान माइग्रेशन के लिए जोड़ा गया था, और कभी-कभी यह अपवाद पुराने कोड बेस पर पॉप अप करता है जो जुनीट 3.8 का उपयोग करता है। ग्रहण JUnit 4 परीक्षण धावक JUnit 3.8 परीक्षण चलाते समय junit.framework.* कोड पर कॉल करने के लिए वापस स्विच करने के लिए दिखाई देगा।

तो मुझे लगता है कि आपके पास अभी भी आपके क्लासपाथ पर गुप्त रूप से जुनीट 3.8.1 है, और यह एक्लिप्स परीक्षण धावक के साथ संघर्ष कर रहा है। या तो उस जेएआर से छुटकारा पाएं, या इसे "अपग्रेड करें" 3.8.2 पर।

+0

का उपयोग कर रहा हूं यदि आप इसे अपनी परियोजना निर्भरताओं में नहीं देखते हैं तो पुस्तकालयों में से एक 3.8 का उपयोग कर सकता है। यदि आप वहां से लाइब्रेरी को नहीं हटा सकते हैं तो @RunWith (JUnit4.class) एनोटेशन का उपयोग करने का प्रयास करें। –

12

यह भी आप JUnit 4 उपयोग कर रहे हैं तब हो लेकिन पुराने junit.framework पैकेज (बजाय नई org.junit पैकेज)

चेक दोनों अपने आयात और अपने स्थिर आयात से Assert वर्ग आयात कर सकते हैं - मेरे लिए दोषी import static junit.framework.Assert.assertEquals;

+1

धन्यवाद! मैंने बिल्कुल वही किया :) –

+0

यह भी देखें: http://stackoverflow.com/questions/291003/differences-between-2-junit-assert-classes –

5

ग्रहण में मेरी परीक्षा कक्षा चलाते समय भी वही त्रुटि आई लेकिन मेरा समाधान थोड़ा अलग था।

मेरा सेटअप यह था कि मेरे पास क्लासपाथ में जूनिट-4.10 जार था लेकिन मेरी टेस्ट क्लास जूनिट 3 का उपयोग कर रही थी और अपवाद केवल तब हुआ जब assEEquals विधि विफल हुई।

समस्या यह है कि ग्रहण अभी भी JUnit 4 धावक का उपयोग कर रहा था तो मैं विन्यास ("रन विन्यास" ग्रहण में का चयन संपादित करके, फिर परीक्षण वर्ग का चयन करें और फिर "परीक्षण रनर" बदलते ड्रॉपडाउन में से यह बदल "जुनीट 4" से "जुनीट 3" तक)।

1

मुझे भी समस्या थी, लेकिन ऐसा इसलिए था क्योंकि मैं जुनीट 4.1 का उपयोग कर रहा था। मैं 4.4 पर स्विच किया और समस्या चली गई।

0

मुझे एक्लिप्स के केप्लर संस्करण में अपग्रेड करने के बाद ही समस्या थी। यदि मैं "ऑल" परीक्षण चलाता तो परीक्षण ठीक होगा। लेकिन जब मैंने एक विधि परीक्षण चलाया तो यह इस त्रुटि से असफल हो जाएगा।

मुझे यह जवाब मिला और मैंने सोचा कि मैं इसे भविष्य में किसी और की मदद के लिए यहां साझा करूंगा। इसका लंबा और छोटा जूनिट 4.4 या बेहतर

https://www.gotraveltech.com/confluence/display/COOK/My+Eclipse पर स्क्रॉल किया गया है "मैं MyEclipse में व्यक्तिगत JUnit 4.x.x परीक्षण कैसे चला सकता हूं?"

3

मेरे मामले में समस्या JUnit-4.5.jar परियोजना के लिए एक पुस्तकालय के रूप में सीधे जोड़ा था।

मेरे समाधान ग्रहण परियोजना से JUnit जार पर निर्भरता को निकालना था और JUnit प्लगइन पुस्तकालय पर निर्भर हैं। वह स्वचालित रूप से जोड़ा जाता है या प्रोजेक्ट की लाइब्रेरी स्क्रीन पर लाइब्रेरी जोड़ें बटन पर क्लिक करके मैन्युअल रूप से जोड़ा जा सकता है।

एक प्लगइन से JUnit लेता है और एक संदर्भ इस के समान है कि:

.../Eclipse/plugins/org.junit_4.12.0.v201504281640 

यह भी आदेश और निर्यात टैब में सूची के शीर्ष पर JUnit पुस्तकालय स्थानांतरित करने के लिए आवश्यक है। निर्यात के लिए चेकबॉक्स की जांच करना जरूरी नहीं है।

0

निर्भरताओं और आयातित पुस्तकालयों की जांच संस्करण इस मामले में सबसे अधिक उत्पादक है।

उदाहरण के लिए, @Test एनोटेशन org.junit.Test से आयात किया जा सकता है और @org.testng.annotations.Test नहीं।

Exception in thread "main" java.lang.NoSuchMethodError: ...