كيف يمكنك إرشاد NUnit لتحميل الجمعية dll.config من معين الدليل ؟

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

سؤال

إن الجمعية يحتوي على التطبيق.config ConfigurationManager سيتم تحميل طالما هو في نفس الدليل كما NUnit المشروع الذي ينفذ من خلال NUnit-واجهة المستخدم الرسومية.لتوضيح النظر في بنية المجلد التالية.

+ TestFolder
    testProject.nunit
  + AssemblyAFolder
      assemblyA.dll
      assemblyA.dll.config
  + AssemblyBFolder
      assemblyB.dll
      assemblyB.dll.config

سواء AssemblyA و AssemblyB ممارسة رمز المكالمات إلى ConfigurationManager.إذا قمت بتشغيل الاختبار هذه الجمعيات بشكل مستقل في NUnit-واجهة المستخدم الرسومية ، ConfigurationManager سوف بشكل صحيح حل المحلية ملفات التكوين.

ومع ذلك ، إذا كنت تحميل testProject.nunit في NUnit-واجهة المستخدم الرسومية (الذي يحتوي على إشارات إلى كل من AssemblyA و AssemblyB), ConfigurationManager يبحث عن ملف التكوين في TestFolder بغض النظر عن الجمعية حاليا على تنفيذ.

هل هناك طريقة لتوجيه NUnit إلى إعادة تكوين التطبيق إلى أحد الحاضرين في الجمعية الحالية هو الدليل ؟

وإليك محتويات testProject.nunit:

<NUnitProject>
  <Settings activeconfig="Debug" />
  <Config name="Debug" binpathtype="Auto">
    <assembly path="AssemblyAFolder\assemblyA.dll" />
    <assembly path="AssemblyBFolder\assemblyB.dll" />
  </Config>
</NUnitProject>
هل كانت مفيدة؟

المحلول

وأوضحت بلوق NUnit لماذا تحميل ملفات التهيئة بالطريقة التي يتصرفون بها. أساسا ما وصفوه أن NUnit يتيح إطار التعامل مع ملفات التكوين ولا تفعل أي من إدارة.

ويمكنك أيضا استخدام ملف testProject.config التي سيتم تحميلها في قضيتك، للإشارة إلى ملفات التكوين لكل من التجمعات. باستخدام السمة ملف appSettings لإضافة المفاتيح.

واحد بديل النهائي هو استخدام في العنصر configSource يعزو لاستخدام قسم في واحدة من الجمعيات ملفات التكوين.

وآمل أن يساعد هذا.

نصائح أخرى

Nunit غير قادر على تحديد موقع مسار التطبيق.ملف التكوين في المشروع.لذلك نحن بحاجة إلى يدويا اقول Nunit حيث التطبيق.config يتم وضعها في مشروعنا (الواضح في المجلد الجذر).

في حالتي , هيكل المشروع هي على النحو التالي

     +ProjectWEBApp//web pages
       +Modules
         +aspx pages
       +web.Config

    +projectBusinesslogic //business logic .cs files
       +Modules
         +.cs

      +ProjectTestName// a seperate Nunit test cases project
        +Modules
      +App.Config

على ProjectWebApp يستخدم المراجع projectBusinesslogic الذي يحتوي على منطق الأعمال.ال +ProjectTestName يستخدم الإشارة projectBusinesslogic لأداء الاختبار على منطق الأعمال.المشاكل تبدأ هنا ، Nunit اختبار المشروع يحتاج التطبيق الخاص بها.ملف التكوين.لن استخدام شبكة الإنترنت.config كما في حالة projectBusinesslogic ، لذلك عند تشغيل Nunit فإنه سيدفع خطأ

-مرجع فارغة استثناء.......كائن الفورية إلى ...........

الحل عند تشغيل Nunit واجهة المستخدم الرسومية

  1. المشروع->تحرير جديد يطفو على السطح سوف تفتح
  2. خصائص -> عام->تكوين اسم الملف-> إضافة التطبيق.التكوين اسم الملف
  3. ملف->حفظ وإغلاق النافذة المنبثقة
  4. على Nunit واجهة المستخدم الرسومية-File-> إعادة تحميل المشروع

و هذا هو حل مشكلتك

والعنصر configSource <لأ href = "https://stackoverflow.com/questions/1412235/how-do-you-instruct-nunit-to-load-an-assemblys-dll-config-file-from-a محددة د / 1416639 # 1416639 "> الحل التي قدمها MarkLawrence هو ما كنت أبحث عنه، ويعمل بشكل جيد. ويتمثل التحدي في تنفيذ هذا الحل ومع ذلك، هو جعل الحمل التكوين التجمع عند تشغيل الاختبارات من كل مشروع NUnit صريح (كما في <لأ href = "https://stackoverflow.com/questions/1412235/how-do-you- تكليف-nunit-لوأد-على-الجمعية-دلل بين التكوين الملفات من واحد معين-د "> حالتي )، وعند تشغيل وحدة الاختبارات للتجميع في العزلة (أي مشروع واضح ). ولتحقيق ذلك، كان المطلوب من التعديلات التالية على تخطيط ملفي.

+ TestFolder
    testProject.nunit
    testProject.config
  + AssemblyAFolder
      assemblyA.dll
      assemblyA.dll.config
      assemblyA.dll.configfragment
  + AssemblyBFolder
      assemblyB.dll
      assemblyB.dll.config
      assemblyB.dll.configfragment

ويتم إنشاء ملفات configfragment لاحتواء التكوين التجميع الذي كان مرة واحدة في ملفات config المقابلة. بعد ذلك، يتم تعديل الملفات config أن يحتوي فقط على عنصر configSource مع مسار نسبي إلى ملف configfragment المقابلة. لاحظ أن المرة الوحيدة التي لم ينجح هذا النهج هو عندما assemblyA.dll وassemblyB.dll كلا تتطلب قسم التكوين نفسه، وكما سوف ينشأ الصراع عند إنشاء testproject.config.

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

void WithConfigurationFile(Action method)
{
    // Create the assembly configuration.
    string settingsSection = "myConfigSectionName";
    Configuration config =
        ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    config.Sections.Add(
        settingsSection,
        new ConfigSectionType(/*config element values*/);
    config.Save();

    try
    {
        // Invoke the method with the new configuration.
        ConfigurationManager.RefreshSection(settingsSection);
        method();
    }
    finally
    {
        // Revert the assembly configuration.
        File.Delete(config.FilePath);
        ConfigurationManager.RefreshSection(settingsSection);
    }
}

وباستخدام ConfigurationManager.OpenExeConfiguration () الزائد أن يفعل لا يقبل طريقا، نحن تحميل التكوين من دليل العمل التطبيق المضيف، والذي يتغير اعتمادا على كيفية تشغيل الاختبارات NUnit الخاص بك. أيضا، وحاول / كتلة أخيرا ضمانات بأن التكوين التجميع الخاص بك لن تتداخل مع غيرها من التجارب، التي قد تكون أو لا يتطلب هذا التكوين.

وأخيرا، لاستخدامها داخل وحدة الاختبار:

[Test]
void VerifyFunctionality
{
    WithConfigurationFile(delegate
    {
        // implement unit test and assertions here
    });
}

وآمل أن يكون هذا يساعد الآخرين الذين قد واجهت قضايا مماثلة!

استخدم السمة configfile في مستوى التكوين في ملف .nunit الخاص بك:


<Config name="Debug" configfile="myconfigfilenamegoeshere.config />

في الواقع، إذا كنت تستخدم NUnit وعداء داخل Visual ستوديو، يمكنك عصا القيمة الخاصة بك في App.config في المشروع الاختبار. ثم قم بإضافة هذا الخط لحدث ما بعد الإنشاء الخاصة بك:

ونسخ / Y "$ (ProjectDir) App.config" "$ (TARGETDIR) $ (TargetFileName) .config"

وعند الوصول إلى ConfigurationManager في الاختبارات الخاصة بك، NUnit سيتم تمرير القيم في app.config لصافي في طريقة تهيئة.

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