كيف يمكنك إرشاد NUnit لتحميل الجمعية dll.config من معين الدليل ؟
-
05-07-2019 - |
سؤال
إن الجمعية يحتوي على التطبيق.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 واجهة المستخدم الرسومية
- المشروع->تحرير جديد يطفو على السطح سوف تفتح
- خصائص -> عام->تكوين اسم الملف-> إضافة التطبيق.التكوين اسم الملف
- ملف->حفظ وإغلاق النافذة المنبثقة
- على 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 لصافي في طريقة تهيئة.