وحدة اختبار مجموعات البيانات الكبيرة؟

StackOverflow https://stackoverflow.com/questions/235402

  •  04-07-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لاختبار وحدة مجموعات البيانات الكبيرة؟ بعض الرموز القديمة التي أنا الحفاظ ديها هياكل مائة أعضاء أو أكثر. أجزاء أخرى من التعليمات البرمجية التي نعمل على إنشاء أو تحليل مجموعات البيانات مئات من العينات.

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

هل هناك حلول أفضل؟

لا يوجد حل صحيح

نصائح أخرى

إذا ما تحاول تحقيقه هو، في الواقع، وحدة الاختبار يجب أن يسخر من الهياكل البيانات الأساسية ومحاكاة البيانات. هذه التقنية تمنحك السيطرة الكاملة على المدخلات. على سبيل المثال، كل اختبار تكتب قد التعامل مع نقطة بيانات واحدة وسيكون لديك مجموعة موجزة جدا من الاختبارات لكل حالة. هناك العديد من الأطر المفتوحة ساخرا المصدر إلى هناك، وأنا شخصيا أنصح الكركدن يسخر ( HTTP: // ayende.com/projects/rhino-mocks/downloads.aspx ) أو NMock ( HTTP: //www.nmock حسنى ).

إذا لم يكن من الممكن بالنسبة لك ليسخر من بنيات البيانات أوصي إعادة الهيكلية لذلك كنت قادرا على :-) ما يستحق ذلك! أو قد ترغب أيضا في محاولة TypeMock ( http://www.typemock.com/ ) الذي يسمح ساخرا فصول محددة.

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

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

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

<اقتباس فقرة>   

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

كود

ولقد كتبت والذي يستخدم تقنية أعلاه باستثناء بدلا من serialising من القرص في الاختبار، لقد تحول البيانات المتسلسلة إلى صفيف بايت والتي يمكن أن تضع المترجم في تنفيذ بالنسبة لك.

وعلى سبيل المثال، يمكن تحويل البيانات المتسلسلة الخاص بك:

unsigned char mySerialisedData[] = { 0xFF, 0xFF, 0xFF, 0xFF, ... };

test()
{
    MyStruct* s = (MyStruct*) mySerialisedData;

}

لمثال أكثر مطول (في C #) رؤية هذا <وأ href = "http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/Mono.Security/Test/Mono.Security/StrongNameTest .cs؟ المراجعة = 101823 وجهة نظر = العلامات "يختلط =" نوفولو noreferrer "> وحدة اختبار . فإنه يدل على مثال باستخدام بعض البيانات المتسلسلة ضمنية كمدخل لاختبارات، اختبار توقيع التجمع.

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