2013-04-03 9 views
10

में प्रत्येक परीक्षण के लिए जेवीएम को कैसे फोर्क करें मैं कुछ वर्गों के साथ काम कर रहा हूं (किसी कारण से) केवल एक ही वीएम के भीतर ही उपयोग किया जा सकता है। मेरे टेस्ट केस काम करते हैं अगर मैं उन्हें sbt सेटिंग्स में व्यक्तिगत रूप से चलाता हूं (fork := true)।एसबीटी

यदि मैं इनमें से एक से अधिक परीक्षण चलाता हूं, तो वे एक अपवाद के साथ असफल होते हैं जो किसी थ्रेड निष्पादक के साथ किसी कार्य को अस्वीकार कर देता है (यह संभवतः बंद हो जाता है)। यह पता लगाने में बहुत समय लगेगा कि समस्या का कारण क्या है और यहां तक ​​कि यदि मुझे समस्या मिलती है, तो भी मैं इसे हल करने में सक्षम नहीं हूं (मुझे स्रोत कोड तक पहुंच नहीं है)।

मैं वर्तमान में specs2 परीक्षण ढांचे का उपयोग कर रहा हूं, लेकिन sbt का उपयोग कर कोई भी परीक्षण ढांचा स्वीकार्य होगा।

क्या sbt के लिए कोई परीक्षण ढांचा है जो jvm कांटा में प्रत्येक परीक्षण चलाने में सक्षम है?

संभावित अन्य समाधानों पर विचार या विचार निश्चित रूप से स्वागत है।

उत्तर

7

यह पता चला है कि यह हासिल करना काफी आसान है। प्रलेखन के लिए पर्याप्त है और Testing - Forking tests

// Define a method to group tests, in my case a single test per group 
def singleTests(tests: Seq[TestDefinition]) = 
    tests map { test => 
    new Group(
     name = test.name, 
     tests = Seq(test), 
     runPolicy = SubProcess(javaOptions = Seq.empty[String])) 
    } 

// Add the following to the `Project` settings 
testGrouping in Test <<= definedTests in Test map singleTests 
+0

एसबीटी का कौन सा संस्करण पर काम करता है? मैं 0.13.1 का उपयोग कर रहा हूं और मुझे कोई भाग्य नहीं है। मेरा उपयोग मामला यह है कि मैं एक play2 ऐप चला रहा हूं और मुझे कुछ साथी ऑब्जेक्ट्स मिल गए हैं जिन्हें मैं प्रत्येक वीएम रन (प्रत्येक टेस्ट) पर कॉन्फ़िगरेशन डेटा के साथ प्रारंभ करना चाहता हूं और यह निश्चित रूप से इस समाधान के साथ ऐसा नहीं कर रहा है। धन्यवाद! – Jordan

+0

मुझे लगता है कि एसबीटी 0.12, लिंक हालांकि एक नए संस्करण को इंगित करता है। – EECOLOR

+2

आह, यह एसबीटी के मेरे संस्करण में दिखता है, आपको टेस्ट में टेस्ट ग्रुपिंग करने की ज़रूरत है << .... ' – Jordan

1

में पाया जा सकता गैर पदावनत वाक्य रचना का उपयोग करना:

testGrouping in Test := (definedTests in Test).value map { test => 
    Tests.Group(name = test.name, tests = Seq(test), runPolicy = Tests.SubProcess(
    ForkOptions(
     javaHome.value, 
     outputStrategy.value, 
     Nil, 
     Some(baseDirectory.value), 
     javaOptions.value, 
     connectInput.value, 
     envVars.value 
    ))) 
}