كيفية جعل اختبار دلفي DUnit يفشل عندما يكون TSQLConnection.Connected = صحيح

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

  •  19-08-2019
  •  | 
  •  

سؤال

عند استخدام Delphi IDE، فإنه سيتم تغيير SQLConnection.Connected بصمت إلى "صحيح" عند ملء قوائم الحقول أو الجداول في خصائص مختلفة.

نظرًا لأنني لا أرغب في الإصدار باستخدام Connected = true، فأنا بحاجة إلى فشل اختبار dunit الخاص بي عندما يتم ترك TSQLConnection.Connected صحيحًا في dfm.

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

المحلول

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

وهذا يمكن تعديلها للعمل مع أي الخصائص الملائمة. لقد وضعت نواة رمز هنا أيضا.

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

nState := 0;
bFound := False;
for nFileLoop := 0 to memoFile.Lines.Count - 1 do
begin
  szLine := memoFile.Lines[nFileLoop];

  case nState of      //
  0:
     begin
        if(0 <> Pos('TADOConnection', szLine)) then
        begin
           szSeeking := 'Connected';
           nState := 1;
        end
        else if(0 <> Pos('TADOTable', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TADOQuery', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMTable', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMDatabase', szLine)) then
        begin
           szSeeking := 'Connected';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMSession', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMQuery', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end;
     end;
  1 :
     begin
        bFound := True;
        if(0 <> Pos('end', szLine)) then
        begin
           nState := 0;
        end
        else if(0 <> Pos(szSeeking, szLine)) then
        begin
           nPos := Pos('=', szLine);
           if nPos > 0 then
           begin
              memoFile.Lines[nFileLoop] := Copy(szLine, 1, nPos) + ' False';
           end;
        end;
     end;
  end;      // case
end;

نصائح أخرى

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

هل يمكن كتابة سليل الخاصة بك من TSQLConnection أن لا تخزن ممتلكاتها متصلة:

  TdzAdoConnection = class(TADOConnection)
  published
    property Connected stored false;
  end;

وواستخدام هذا المكون بدلا من TSqlConnection.

و(ما سبق هو لTAdoConnection، ولكن ينبغي أيضا TSQLConnection تعمل بشكل جيد).

OpenCTF - قد يكون إطار اختبار المكونات لدلفي مثيرًا للاهتمام، فهو يقوم تلقائيًا بإنشاء اختبارات وحدة لخصائص محددة لجميع المكونات في جميع النماذج/وحدات البيانات.وهو مفتوح المصدر وسهل الاستخدام.

وثيقة "البدء": http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf

يساعد إطار اختبار مكون OpenCTF على بناء اختبارات تلقائية لجميع مكونات VCL (المرئية وغير المرئية) في تطبيق Delphi.يعتمد على إطار Dunit.

بعض أمثلة الاستخدام:

  • اكتشاف قيم الخصائص المفقودة أو الخاطئة - على سبيل المثال.الأزرار بدون إجراءات معينة، ومصادر البيانات بدون مجموعة البيانات المرتبطة
  • اكتشاف معالجات الأحداث غير المعينة - على سبيل المثال.حدث OnExecute مفقود
  • تأكد من إمكانية فتح كافة مجموعات البيانات
  • تحقق من ترتيب علامة التبويب
  • ابحث عن المكونات غير المرئية (على سبيل المثال.أوراق علامات التبويب غير المرئية والتي من الأفضل أن تكون مخفية في وقت التشغيل)

OpenCTF http://www.mikejustin.com/images/OpenCTF.gif

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

في بيئتنا، وبنيت كل رمز الإنتاج على مخصصة "آلة بناء"، لذلك إذا كان رمز لا تحصل على إيداعه، فإنه لا جعله الإنشاء. حل المشكلة.

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