سؤال

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

تحديث:

لقد نسيت أن أذكر أنني أستخدم BDS 2006 Pro، على الرغم من أنني أستخدم Delphi 7 أحيانًا، وبالطبع قد يستخدم آخرون إصدارات أخرى.

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

المحلول

وحدة DUnit هو نوع xUnit من إطار عمل اختبار الوحدة الذي سيتم استخدامه مع Win32 Delphi.منذ دلفي 2005، تم دمج DUnit في نقطة معينة في IDE.يمكن العثور على أدوات تكامل DUnit أخرى لـ Delphi IDE هنا.تأتي DUnit مع التوثيق مع الأمثلة.

نصائح أخرى

هناك بعض الوظائف الإضافية لـ DUnit، ربما يستحق هذا إدخالاً جديدًا في SO.اثنان يمكنني أن أضعهما في القائمة الآن

  1. فاستMM4 اندماج:ستكشف اختبارات الوحدة تلقائيًا عن تسرب الذاكرة (وأشياء أخرى)، وتعمل مع DUnit 9.3 والإصدارات الأحدث
  2. OpenCTF هو "إطار اختبار المكون" يعتمد على Dunit ، فهو ينشئ الاختبارات ديناميكيًا لجميع المكونات في نماذج المشروع وإطاراتها و datamodules ، واختباراتها باستخدام قواعد مخصصة (المصدر المفتوح)

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

يرى http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

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

type
  TTestNumbersAdding = class(TSynTestCase)
  published
    procedure TestIntegerAdd;
    procedure TestDoubleAdd;
  end;

procedure TTestNumbersAdding.TestDoubleAdd;
var A,B: double;
    i: integer;
begin
  for i := 1 to 1000 do
  begin
    A := Random;
    B := Random;
    CheckSame(A+B,Adding(A,B));
  end;
end;

ثم تقوم بإنشاء بدلة اختبار وتشغيلها.

في الإصدار 1.13 القادم، توجد أيضًا آلية تسجيل جديدة مع تتبع المكدس لأي استثناء بارز وما شابه، تمامًا مثل MadExcept، باستخدام محتوى ملف .map كمصدر.

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

C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13)
Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545
TSynLogTest 1.13 2011-04-13 05:40:25

20110413 05402559 fail  TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163) 

الفرق بين بدلة الاختبار بدون التسجيل وبدلة الاختبار مع التسجيل هو هذا فقط:

procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase);
begin
  inherited;
  with TestCase[fCurrentMethod] do
    fLogFile.Log(sllFail,'%: % "%"',
      [Ident,TestName[fCurrentMethodIndex],msg],aTest);
end;

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

في المرة الأولى التي تتم فيها قراءة ملف .map، يتم إنشاء ملف .mab، وسيحتوي على كافة معلومات الرمز المطلوبة.يمكنك إرسال ملف .mab مع .exe إلى عميلك، أو حتى تضمين محتواه في .exe.تم تحسين ملف .mab هذا:يتم ضغط ملف .map بحجم 927,984 بايت في ملف .mab بحجم 71,943.

لذلك يمكن التعرف على هذه الوحدة باعتبارها الابن الطبيعي لحفل زفاف DUnit وMadExcept، في مصدر مفتوح خالص.:)

معلومات إضافية هي متاح على منتدانا.اسأل بحرية.ردود الفعل وطلبات الميزات هي موضع ترحيب!يعمل من دلفي 6 حتى XE.

DUnit2 متاح من http://members.optusnet.com.au/~mcnabp/

يتم تعديل DUnit2 بشكل أكثر انتظامًا من dunit الأصلية.ويعمل أيضًا على دلفي 2009.

يحاول: http://sourceforge.net/projects/dunit2/ - لقد انتقلت مع وفاة المؤلف الأصلي بيتر ماكناب منذ عدة سنوات.لا يزال هناك بعض النشاط على القائمة البريدية dunit.

هناك إطار عمل جديد لاختبار الوحدات لإصدارات دلفي الحديثة قيد التطوير: https://github.com/VSoftTechnologies/DUnitX

عادةً ما أقوم بإنشاء مشروع اختبار الوحدة (ملف->جديد->أخرى->اختبار الوحدة->مشروع اختبار).إنه يحتوي على الأشياء التي أحتاجها، لذا فهو جيد بما فيه الكفاية حتى الآن.

أستخدم دلفي 2007 لذا لا أعرف حقًا ما إذا كان هذا متاحًا في عام 2006.

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

لدينا طريقتان، أولاً لدينا اختبارات Dunit التي يتم إجراؤها من قبل المطورين - والتي تتأكد من أن الكود الذي تم تغييره للتو لا يزال يعمل كما كان من قبل.أما الأسلوب الآخر فهو استخدام CruiseControl.NET لإنشاء ملفات تنفيذية ثم تشغيل اختبارات dunit في كل مرة يتم فيها إجراء تغيير، لضمان عدم وجود عواقب غير مقصودة للتغيير.

لا يحتوي جزء كبير من قاعدة التعليمات البرمجية لدينا على اختبارات، لذا فإن الاختبارات التلقائية هي حالة من التطوير المستمر لضمان عمل تطبيقاتنا كما نعتقد.

لقد حاولنا استخدام DUnit مع Delphi 5، لكنها لم تعمل بشكل جيد.خاصة إذا كنت تقوم بتطبيق واجهات COM، فقد وجدنا العديد من التبعيات لإعداد البنية التحتية للاختبار بالكامل.لا أعرف ما إذا كان دعم الاختبار قد تحسن في الإصدارات الأحدث.

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