2009-06-27 19 views
13

का उपयोग करके अपेक्षित अपवाद कैसे सेट करें मैं स्कैला का उपयोग कर एक जुनीट 4 परीक्षण के लिए एक अपेक्षित अपवाद सेट करना चाहता हूं। मैं निम्न जैसा कुछ कर वर्तमान हूँ:स्कैला और जुनीट 4

@Test(expected=classOf[NullPointerException]) 
def someTest() = { 
    // Some test code 
} 

लेकिन मैं निम्नलिखित संकलक त्रुटि मिलती है: विशेषताओं के साथ

error: wrong number of arguments for constructor Test:()org.junit.Test 
+2

प्रश्न में वाक्यविन्यास स्कैला 2.10.3 में मेरे लिए ठीक काम करता है। – SigmaX

उत्तर

8

रास्ता स्केला सौदों एक छोटे से अजीब है। मुझे लगता है कि आप क्या करने की इस तरह व्यक्त किया जाना चाहिए कोशिश कर रहे हैं क्या:

@Test { val expected = classOf[ NullPointerException] } 
def someTest { 
    // test code 
} 
+0

योवेज़र ... एक मामला जहां जावा * जावा से कम * अभिव्यक्तिपूर्ण है? – skaffman

+0

हाँ, एनोटेशन शायद एक ऐसा क्षेत्र है जहां मुझे भाषा पसंद नहीं है। यह "अगर इसे मूल्य कहा जाता है ..." निहित नियम है, लेकिन, असली, असली प्रशंसक नहीं। ठीक है। –

+4

यह मेरे लिए काम नहीं करता है। मेरा सेटअप: स्कैला 2.9.2, जूनिट 4.10। निम्न त्रुटि संदेश: "परिभाषा की अपेक्षित शुरुआत" – andreas

15

यह थोड़ा सा इंतजार कर रहा है, लेकिन 2.8 में एनोटेशन के लिए वाक्यविन्यास आपके मूल रूप से पोस्ट किए गए जैसा ही बदल गया है। पोस्ट किए गए सिंटैक्स ट्रिस्टन वर्तमान स्थिर संस्करण में सही है, लेकिन जब मैंने अपनी परियोजना को रात 2.8 कंपाइलर में अपग्रेड किया तो मुझे त्रुटियां मिलीं। मुझे लगता है कि यह named and default arguments को शामिल करने के कारण है। स्कैला मेलिंग सूची पर some discussion भी है। का हवाला देते हुए लुकास Rytz:

class mySpec extends SpecificationWithJUnit { 
    "this expects an exception" in { 
    myCode must throwA[NullPointerException] 
    } 
} 

एरिक:

Also note that in 2.8.0 the syntax for java annotations will no longer use the name-value pairs but named arguments instead, i.e.

@ann{ val x = 1, val y = 2} ==> @ann(x = 1, y = 2) 
+1

यह सिर्फ मुझे दुःख की दुनिया से बचाया है। Thx –

+1

मेरे मामले में यह तब तक काम नहीं करता जब तक कि मैंने आयात junit.framework से आयात विवरण नहीं बदला। सबसे अच्छा आयात org.junit.Test (जो जावा के तहत कोई फर्क नहीं पड़ता) –

+0

+1 यह अब सही जवाब है नवीनतम स्कैला संस्करण 2.10। –

0

तुम भी साथ specs कोशिश कर सकते हैं।

0

ScalaTest और JUnit उपयोग एक साथ और आप कर सकते हैं:

import org.scalatest.junit.JUnitSuite 
import org.scalatest.junit.ShouldMatchersForJUnit 
import org.junit.Test 

class ExampleSuite extends JUnitSuite with ShouldMatchersForJUnit { 

    @Test def toTest() { 
    evaluating { "yo".charAt(-1) } should produce [StringIndexOutOfBoundsException] 
    } 
} 
0

यह मेरे लिए काम करता (JUnit 4.10, स्काला 2.10.2):

@Test(expected = classOf[NullPointerException]) 
def testFoo() { 
    foo(null) 
} 

क्या Tristan suggested की तरह, लेकिन इस वाक्य वास्तव में मेरी परियोजना में संकलित और काम करता है।

संपादित करें: उह, नज़दीक दिख रहा है, यह मूल प्रश्न था। खैर, मुझे लगता है कि जवाब में नवीनतम कामकाजी वाक्यविन्यास भी चोट नहीं पहुंचाता है।

संबंधित मुद्दे