كيفية جعل اختبار دلفي DUnit يفشل عندما يكون TSQLConnection.Connected = صحيح
سؤال
عند استخدام 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 مفقود
- تأكد من إمكانية فتح كافة مجموعات البيانات
- تحقق من ترتيب علامة التبويب
- ابحث عن المكونات غير المرئية (على سبيل المثال.أوراق علامات التبويب غير المرئية والتي من الأفضل أن تكون مخفية في وقت التشغيل)
وثمة نهج آخر لهذه المشكلة هو تنفيذ إلزام قبل هوك في SCM الخاص بك. يمكنني استخدام تورتويز إس في إن، ولقد فعلت أشياء مماثلة لمنع الأمور من التسلل في. على سبيل المثال، لدينا مكتبة "جلود" الذي يحاول إضافة حول وحدات عشرات الجلد لأي النموذج الذي فتح في IDE. (لقد حصلت على التصحيح التسجيل التي "إصلاحات" هذا السلوك، لكنه يحصل على "القيام به الامم المتحدة" كل مرة واحدة في حين، إذا مطور إعادة تثبيت-مكونات). حتى لقد حصلت على "قائمة السلاسل المحظورة" في ملف .ini التي هي في SVN مسبقا إلزام هوك.
في بيئتنا، وبنيت كل رمز الإنتاج على مخصصة "آلة بناء"، لذلك إذا كان رمز لا تحصل على إيداعه، فإنه لا جعله الإنشاء. حل المشكلة.