لماذا تختفي "استخدام الوحدة" عندما كان لدي وحدة جديدة؟

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

  •  23-09-2019
  •  | 
  •  

سؤال

لدي مشروع اختبار الوحدة لتطبيقي باستخدام Dunit Framework. يحتوي هذا المشروع على وحدة محاطة ب $IFDEF لإخراج نتائج الاختبار في ملف XML بدلاً من واجهة المستخدم الرسومية أو سطر الأوامر فقط. يتم تمكين XML_Output Define عن طريق تبديل تكوين الإنشاء.

program DelphiCodeToDoc_Tests;

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
{$IFDEF XML_OUTPUT}
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas',
{$ENDIF}
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...

هذا يعمل تماما. تبدأ القضية عندما أضيف وحدة جديدة إلى هذا المشروع من IDE (وحدة جديدة مع "ملف> جديد> وحدة").

مشروع الاختبار الآن:

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
  MyNewUnit in 'IntegrationTests\MyNewUnit.pas';

كما ترى ، اختفى اختبار XML_Output ... في كل مرة أقوم فيها بإضافة وحدة ، يقوم Delphi IDE بحذف هذا الاختبار.

هل تعرف لماذا وكيف يمكنني تجنب ذلك؟

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

المحلول

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

يمكنك رؤية جميع التعليمات البرمجية المرتبطة بالتطبيق الخاص بك عند تشغيل البرنامج داخل IDE. يجب أن ترى النقاط الزرقاء بجانب جميع الكود المترجم.

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

نصائح أخرى

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

program DelphiCodeToDoc_Tests;

uses
  ...
  XMLTestRunnerProxy,  
  ...

و

unit XMLTestRunnerProxy;

interface

{$IFDEF XML_OUTPUT}
uses
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas';
{$ENDIF}

implementation

end.

كوريا الديمقراطية الاستخدامات تتم إدارة القائمة من قبل IDE. لسوء الحظ ، لا يوجد شيء يمكنك فعله حيال هذا. رسميًا ، ليس من المفترض أن تضع IFDEFs في منتصف كونيا الاستخدامات اذكر لأنه سيفعل أشياء مثل هذا إذا قمت بذلك.

ما سأفعله هو ترك وحدة XMlTestrunner2 في المشروع ، ووضع IFDEFs داخل الوحدة نفسها بحيث لا يكون لديك مجموعة XML_Output ، فهي لا تجمع أي شيء.

يحدث التجريد في أي وقت يجب على IDE تعديل جملة استخدامات استخدام DPR. إن استخدام "حفظ AS" لإعادة تسمية الوحدة سيفعل نفس الشيء.

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

ونعم ، هذا خطأ. QC#6294 على وجه التحديد ، وهو مفتوح ، لذلك يدرك Embarcadero المشكلة.

النظر في وجود مشروعين. مرة واحدة مع الكود الاختياري ، واحد بدون. ثم بناء أيهما تريد ، أو كليهما. باستخدام مجموعات المشروع ، ستعمل بشكل جيد.

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