2013-01-24 23 views
6

मेरे पास एक प्ले है! प्रोजेक्ट जहां मैं कुछ कोड कवरेज जानकारी जोड़ना चाहता हूं। अब तक मैंने JaCoCo और scct को आजमाया है। पूर्व में समस्या यह है कि यह बाइटकोड पर आधारित है, इसलिए ऐसा लगता है कि स्काला कंपाइलर, जैसे copy या canEqual द्वारा स्वत: उत्पन्न किए गए तरीकों के लिए अनुपलब्ध परीक्षणों के बारे में चेतावनी देना प्रतीत होता है। एससीटीटी एक बेहतर विकल्प प्रतीत होता है, लेकिन किसी भी मामले में मुझे दोनों के साथ परीक्षण के दौरान कई त्रुटियां मिलती हैं।प्ले पर कोड कवरेज! प्रोजेक्ट

मुझे स्कैक्ट के साथ चिपकने दें। मुझे अनिवार्य रूप से डेटाबेस से कनेक्ट करने का प्रयास करने वाले प्रत्येक परीक्षण के लिए त्रुटियां मिलती हैं। मेरे कई परीक्षण स्मृति में एच 2 डेटाबेस में कुछ फिक्स्चर लोड करते हैं और फिर कुछ दावे करते हैं। मेरे Global.scala

override def onStart(app: Application) { 
    SessionFactory.concreteFactory = Some(() => connection) 

    def connection() = { 
     Session.create(DB.getConnection()(app), new MySQLInnoDBAdapter) 
    } 
} 

शामिल करते हुए परीक्षण आमतौर पर

class MySpec extends Specification { 
    def app = FakeApplication(additionalConfiguration = inMemoryDatabase()) 

    "The models" should { 
     "be five" in running(app) { 
      Fixtures.load() 
      MyModels.all.size should be_==(5) 
     } 
    } 
} 

लाइन running(app) मुझे एक काम कर आवेदन के संदर्भ में एक स्मृति डेटाबेस से जुड़ा में एक परीक्षण चलाने के लिए अनुमति देता है की तरह एक ब्लॉक में बंद होते हैं कम से कम आमतौर पर। लेकिन जब मैं कोड कवरेज कार्यों को चलाता हूं, जैसे स्कैट coverage:doc, मुझे डेटाबेस से कनेक्ट करने से संबंधित त्रुटियों के लॉट मिलते हैं।

क्या और भी अधिक अजीब है की तरह कम से कम 4 विभिन्न त्रुटियों देखते हैं कि, यह है:

  • ObjectExistsException: कैश खेलने पहले से मौजूद है
  • SQLException: एक पूल है कि पहले से ही किया गया है से एक कनेक्शन प्राप्त करने के लिए प्रयास कर रहा है बंद
  • कॉन्फ़िगरेशन त्रुटि [डेटाबेस से कनेक्ट नहीं कर सकते [डिफ़ॉल्ट]]
  • कोई उपयुक्त ड्राइवर JDBC मिला: एच 2: मेम: खेलने-परीक्षण - 410454547

क्यों डिफ़ॉल्ट कॉन्फ़िगरेशन में लॉन्चिंग परीक्षण डेटाबेस से कनेक्ट करने में सक्षम है, जबकि scct (या JaCoCo) के संदर्भ में चलते समय कैश और डीबी प्रारंभ करने में विफल रहता है?

+0

साथ एसबीटी चलाने वैसे, एक बात मैं हमेशा संदिग्ध के रूप में देखा है तथ्य यह है कि मैं एक 'MySqlInnoDBAdapter' उपयोग करने के लिए आवेदन की घोषणा है, लेकिन परीक्षण पर चलने एक इन-मेमोरी एच 2 उदाहरण। किसी भी तरह जादू 'फैक एप्प्लिकेशंस' में होना चाहिए, लेकिन मुझे आश्चर्य है कि इस मुद्दे के साथ हाथ में – Andrea

उत्तर

1

specs2 परीक्षण डिफ़ॉल्ट रूप से समानांतर में चलते हैं। प्ले मानक यूनिट परीक्षण कॉन्फ़िगरेशन के लिए समानांतर निष्पादन को अक्षम करता है, लेकिन स्कैट एक अलग कॉन्फ़िगरेशन का उपयोग करता है, इसलिए यह समानांतर में नहीं चलने के बारे में नहीं जानता है।

अपने Build.scala को यह जोड़ने का प्रयास करें:

.settings(parallelExecution in ScctPlugin.ScctTest := false) 

वैकल्पिक रूप से, आप अपने परीक्षण कक्षाओं की शुरुआत करने के लिए sequential जोड़ सकते हैं क्रमिक रूप से चलाने के लिए सभी संभव रन विन्यास के लिए मजबूर करने। मेरे पास अभी भी मेरी फाइलें हैं, क्योंकि मुझे लगता है कि बिल्डस्काला समाधान के साथ मुझे कुछ समस्याएं थीं जब मैं Play के प्रारंभिक रिलीज उम्मीदवार का उपयोग कर रहा था।

+1

धन्यवाद है। मेरे पास JaCoCo के लिए पहले से ही यह कॉन्फ़िगरेशन था, लेकिन ऐसा लगता है कि यह समस्या का मूल कारण नहीं है। जहां तक ​​मैं कह सकता हूं, मैं जो भी त्रुटियां प्राप्त कर रहा था वह अभी भी वहां है। :-( – Andrea

+0

यदि आप 'प्ले डीबग कवरेज: डॉक' जैसे लक्ष्य चलाते हैं, तो क्या आप अपने 'Global.scala' में ब्रेकपॉइंट के साथ एक डीबगर संलग्न कर सकते हैं यह देखने के लिए कि क्या इसे समांतर में कई बार मारा जा रहा है? –

0

आपको अपने विशिष्टता की शुरुआत में अनुक्रमिक जोड़ने की आवश्यकता है।

class MySpec extends Specification { 
    sequential 

    "MyApp" should { 
    //...// 
    } 

} 
1

स्कैला कोड कवरेज के लिए एक बेहतर विकल्प सॉक्वेज है जो स्टेटमेंट कवरेज देता है। https://github.com/scoverage/scalac-scoverage-plugin

प्रोजेक्ट/प्लगइन्स में जोड़ें।एसबीटी:

addSbtPlugin("com.sksamuel.scoverage" % "sbt-scoverage" % "1.0.1") 

फिर

sbt clean coverage test 
+0

हम कैसे बना सकते हैं प्ले फ्रेमवर्क आधारित ऐप्स के लिए यह काम? यह सभी जेनरेटेड रूट फाइलों का वाद्य यंत्र है, जो प्ले एप्लिकेशन परीक्षणों का प्राथमिक हित नहीं है। –

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