Grails/Cobertura रिपोर्ट-सशर्त कवरेज अर्थ नहीं है




(2)

ऐसा कुछ क्यों हो सकता है:

लाइन def result केवल 2/6 शाखाओं को दिखाता है, भले ही इसमें शाखाएं न हों, जबकि निम्नलिखित पंक्ति, जो वास्तव में सशर्त है, ठीक है।

क्या चल रहा है? मैंने सत्यापित किया है कि cobertura.ser बिल्ड्स के बीच साफ हो रहा है।


मैंने हमारे ग्रेट्स प्रोजेक्ट्स में एक ही बात को देखा है - मुझे लगता है कि यह "ऑप्टिमाइज़ेशन" शाखाओं के कारण होता है जो ग्रोवी कंपाइलर बनाता है।

उदाहरण के लिए - यह कोड

def deleteSomething(params) {
   def result
   if(params.something && params.somethingelse)
      result = "something"
   else result = "something else"
}

संकलित जब इस तरह दिखता है

public Object deleteSomething(Object params)
{
   CallSite[] arrayOfCallSite = $getCallSiteArray(); Object result = null; if ((!BytecodeInterface8.isOrigZ()) || (__$stMC) || (BytecodeInterface8.disabledStandardMetaClass())) {
      if (((DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[2].callGetProperty(params))) && (DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[3].callGetProperty(params))) ? 1 : 0) != 0) {
         String str1 = "something"; result = str1; return str1; } else {
         String str2 = "something else"; result = str2; return str2;
      }
   }
   else if (((DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[4].callGetProperty(params))) && (DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[5].callGetProperty(params))) ? 1 : 0) != 0) {
      String str3 = "something"; result = str3; return str3; } else {
      String str4 = "something else"; result = str4; return str4; } return null;
}

अधिक चर्चा यहाँ


आधिकारिक फोरम में भी चर्चा हुई, शाखा कवरेज मुद्दों को देखें।

@रग्रिसा ने एएसटी अनुकूलन को निष्क्रिय करने के लिए एक उत्कृष्ट उपकरण उपकरण जार दिया ताकि Cobertura कवरेज को सही ढंग से गणना कर सके।

जार का उपयोग करने के लिए, बस इसे अपने myapp\lib फ़ोल्डर में रखें और फिर test-app -coverage :)