سؤال

وأنا محاولة لكتابة بعض حالات الاختبار لبعض الفئات التي تنطوي على اختبار المساواة بين اثنين من صفائف الأبعاد من البيانات. هنا هو أول طعنة لي في ذلك:

double[][] expected = {
        {0, 104, 0},
        {145.5, 0, 0},
        {83, 0, 0}
};

double[][] actual = someObject.getArray();

والآن، وأرى أن أداة JUnit ليس لديها "arrayEquals" للصفائف مزدوجة، وربما يرجع ذلك إلى مسألة النقطة العائمة (كنت تريد حقا أن استخدام دلتا مقابل المساواة). ألاحظ أن أداة JUnit-إضافات وبالضبط طريقة أحتاج لتحديد اذا كانا لا يزالان على قدم المساواة:

static void  assertEquals(java.lang.String message, double[] expected, double[] actual, double delta) 

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

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

المحلول

وأعتقد أن كنت الخلط بين وحدة اختبار مع الأجهزة / التصحيح. والغرض من هذا الاختبار هو وحدة لتحديد ما إذا كان يعمل وجوه الخاص بك كما هو متوقع. إذا كنت تحصل في العادة من بينهم التعليمات البرمجية التي هي (فعال) أجهزة في حالات الاختبار الخاص بك، فإنك تزيد من احتمال أن تكتبوا حالات الاختبار التي تم تصميمها لتمرير.

وجوه الخاص بك يحتوي على الأسلوب الذي لإرجاع double[][]. حالة الاختبار أقول لك أنه لا يعمل كما هو متوقع. حان الوقت لتصحيح التعليمات البرمجية.

و(أنا أفهم أن هذا قد يكون نقطة خلافية نظر).

نصائح أخرى

وهكذا، تحاول أن تقارن ضعف [] الصورة أو مزدوجة [] [] ق؟

إذا كنت مقارنة مزدوجة [] ق (المصفوفات 1D)، ثم نعم، كيف حول استخدام أداة JUnit-إضافات؟ ورسالة الخطأ الافتراضية الخاصة به وليس ما تحتاج؟ إذا كنت قادرا على كتابة الاختبارات لاستخدام طريقة مزدوجة [] بدلا من ذلك، ثم assertArraysEquals أداة JUnit ل() التي تعمل على كائن [] سوف يعمل. وسوف مقارنة الزوجي من أجل المساواة بالضبط على الرغم - على افتراض أن هذا ما كنت تنوي

إذا كنت مقارنة مزدوجة [] []، ثم أيا من هذه الأعمال. على الرغم من ضعف [] [] هو كائن []، وكنت لا تنوي مقارنة الفردية مزدوجة [] الصورة لأنها مجرد استخدام المساواة المرجعية.

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

هل يمكنني الحصول على ذلك الحق، وكنت راضيا عن assertEquals (سلسلة مزدوجة []، مزدوجة []، مزدوج) طريقة من أداة JUnit-إضافات باستثناء الإخراج؟

وإذا افترضنا، لديك أو يمكن الحصول على مصدر للطبقة ArrayAssert، فقط reimplement طريقة (نسخ و لصق ولكن تحقق الترخيص لأول مرة) وتعزيز النواتج في طريقة assertEquals مخصص جديد لاحتياجاتك. أعتقد أنها لن تستغرق وقتا طويلا!

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