سؤال

لقد قمت ببعض التغييرات في مكتبة لإبقائها مضمنة مع مشروع. ركضت الاختبار وكل شيء لا يزال مرت ولكن التغطية لم تعد 100٪. لقد قمت بالتحقيق ورأيت أنه يتم تنفيذ التعليمات البرمجية لم يتم الإبلاغ عنها. لكن ليس لدي أي فكرة عن سبب عدم إبلاغ GCOV بتغطية الخط عند تنفيذها.

هذا هو الرمز:

int32_t PreviouslyEncountered(uint32_t n)
{
  uint32_t i;

  /* Search thru all the numbers encoountered so far see if there is a match */
  for(i = 0; i < xcount; i++)
  {
    if(n == collection[i])
    {
      return 1; /* This value has been seen before */
    }
  }

  /* Add the number to encountered values if there is space */
  if(xcount < NUMBERTRACKERMAX )
  {
    collection[xcount] = n;
    xcount++;
  }
  else
  {
    return NUMBERTRACKERMAX ;
  }

  return 0;

} 

هذا هو الاختبار:

/* Fill with 10000 elements */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
  assert(PreviouslyEncountered(i) == 0);
}

/* Test that all 10000 elements are present */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
  assert(PreviouslyEncountered(i) == 1);
}

وهذه هي نتائج التغطية:

       -:   51:int32_t PreviouslyEncountered(uint32_t n)
function PreviouslyEncountered called 201 returned 100% blocks executed 90%
     201:   52:{
     201:   53:  uint32_t i;
       -:   54:
       -:   55:  /* Search thru all the numbers encoountered so far see if there is a match */
   20101:   56:  for(i = 0; i < xcount; i++)
       -:   57:  {
   19900:   58:    if(n == collection[i])
       -:   59:    {
   #####:   60:      return 1; /* This value has been seen before */
       -:   61:    }
       -:   62:  }
       -:   63:
       -:   64:  /* Add the number to encountered values if there is space */
     201:   65:  if(xcount < NUMBERTRACKERMAX )
       -:   66:  {
     200:   67:    collection[xcount] = n;
     200:   68:    xcount++;
       -:   69:  }
       -:   70:  else
       -:   71:  {
       1:   72:    return NUMBERTRACKERMAX ;
       -:   73:  }
       -:   74:
     200:   75:  return 0;
       -:   76:
       -:   77:}

إضافة طباعة من قبل return 1; سوف تنفذ. لن تحصل على تغطية ولكن return 1 سيكون الآن غلاف. أيه أفكار؟ بخلاف صفحات الرجل لا أستطيع العثور على أي شيء.

تحرير: من التعليقات التي يمكنك أن ترى أنني لم تكشف عن كل شيء. لقد حققت بعض التقدم في المشكلة. بعض الاختبارات الأخرى تتسبب وظائف أخرى في أن تختفي الغطاء عند تشغيله. تشغيل فقط الاختبارات ل PreviouslyEncountered يعطي غطاء 100 في المئة لهذه الوظيفة. تشغيل الاختبارات الأخرى إعادة تعيين هذا.

هل كانت مفيدة؟

المحلول

كنت قادرا على إعادة تكوين التعليمات البرمجية التي تسبب في المشكلة حتى أحصل على تغطية 100٪ مرة أخرى. ليس لدي أي فكرة عن مكان انتهاء المشكلة. ربما سوف تحقق ذلك مرة أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top