سؤال

كنت أقوم ببعض اختبارات الوحدة في العمل وظهر خطأ غريب لأحد التأكيدات. لاحظ أن المتوقعين وفعالا كلاهما الزوجي.

Assert.AreEqual(expectedValue, actualValue);

ذكر الاستثناء أنها لم تكن متساوية ، وتوضيح تلك "القيمة المتوقعة: <6.8> القيمة الفعلية: <6.8>."

القيمة المتوقعة هي 6.8 مشفرة صلبة ويتم صياغة القيمة الفعلية باستخدام قيم قاعدة البيانات التي تمر عبر أساليب التصنيف الخاصة بنا (مثل السجلات المتساوية ، أو Jenks Natural Breaks).

أظن أن الفرق هو على الأرجح أن mantissas من القيم 2 متشابهة حتى البت الأقل أهمية. لقد قمت بتحديث الاختبارات لتضمين epsilon للعثور على ما إذا كانت القيمتين قريبة بما فيه الكفاية ، لكنني أشعر بالفضول إذا كانت هناك طريقة لإجبار Mantissa على مطابقة قيمة عرض إذا عرضت ذلك المزدوج. هل يوجد هذا تصحيح مانتيسا؟

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

المحلول

لست متأكدًا تمامًا مما تقصده بإجبار Mantissa على مطابقة قيمة العرض ... هناك نكون لا توجد قيم مزدوجة هي بالضبط 0.1 ، على سبيل المثال.

إذا كنت تريد أن تعرض بعض التعليمات البرمجية بالضبط قيمة مزدوجة ، ومع ذلك ، لدي أ doubleconverter.cs الملف الذي يجعله سهلاً:

 double d = 0.1;
 string x = DoubleConverter.ToExactString(d);

بديل آخر هو استخدام محدد تنسيق الرحلة المستديرة ("R") عند تحويل مضاعفة إلى سلسلة - مما يضمن أن النتيجة لديها معلومات كافية لإعادة إنتاج نفس القيمة الدقيقة لاحقًا. بمعنى آخر ، إذا x != y, ، ومن بعد x.ToString("r") != y.ToString("r").

نصائح أخرى

يمكنك تحويل كلاهما إلى سلسلة: actualValue.ToString("0.000") وقارن تلك الأوتار.

يمكن عمل ذلك لمطابقة متطلباتك عن كثب.

إذا كنت ترغب في اختبار ما إذا كانت قيم العرض الافتراضية تتطابق مع قيم العرض الافتراضية:

Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top