سؤال

أنا أتساءل ما هي أفضل طريقة تهيئة log4Net في NUnit المشروع.بالطبع أريد أن استدعاء رمز الحرف الأول (أي. XmlConfigurator.Configure()) بأسرع ما يمكن للحصول على العديد من المبكر إخراج سجل ما أستطيع.ولكن منذ يتم تشغيل المشروع خلال NUnit, لدي القليل من السيطرة على نقطة الدخول.

وفقا NUnit الوثائق ، يجب استدعاء بعض المنشئات أولا ثم طريقة وضع علامة مع [SetUp] السمة في فئة ملحوظ مع [TestFixtureSetup].

لذا, أول, أنا خلقت ثابت مساعد الدرجة التي يمكنني الاتصال عدة مرات دون مشاكل.

  public static class LoggingFacility
  {
    private static bool _loggerIsUp = false;

    public static void InitLogger()
    {
      if (_loggerIsUp == false)
        XmlConfigurator.ConfigureAndWatch(f);

      _loggerIsUp = true;
    }
  }

ثم أنا قدمت كل ما عندي [TestFixtureSetup] يرث واحد أن لا حد كبير أي شيء آخر من الدعوة LoggingFacility.initLogger().ولكن هذا ما زال يترك جميع المنشئات التي يتم تشغيلها في وقت سابق في أمر أستطيع إلا أن نفترض عشوائي.وعلاوة على ذلك, فإنه من المحتمل القيام ببعض ثابت التهيئة قبل أنا حتى قادرة على تنفيذ بعض التعليمات البرمجية.

في الواقع ، كما يمكن أن نرى في سجل أول 4 ثواني أو حتى الإعدام تماما غير المسجلة.

يعني يجب علي الاتصال بي InitLogger() في كل منشئ تمنع استخدام أي ثابت مهيئ?هذا هو مهمة صعبة!

هل تعلم خدعة سحرية مع هذا ؟

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

المحلول 2

شريك العمل الذي قدم لي مع الحل البديل التالي، وهذا يفعل الوظيفة:

في جميع فصاتي التي تتطلب تسجيل، كان لدي تهيئة المسجلات التالية giveacodicetagpre.

قمت ببساطة بتغييره إلى التهيئة Singleton giveacodicetagpre.

لأن لدي هذا الرمز في كل فصل، يجب استدعاء هذا التهيئة الثابتة مبكرا جدا بواسطة Nunit Wile Instentiating فئات الاختبار الخاصة بي.

الخطوة التالية هي جعل هذا الموضوع آمنا: (

نصائح أخرى

واحد التهيئة نقطة يجب عليك استخدام فئة ملحوظ مع [SetUpFixture] سمة وطريقة ملحوظ مع [SetUp], على سبيل المثال:

[SetUpFixture]
public class TestsInitializer
{
    [SetUp]
    public void InitializeLogger()
    {
        LoggingFacility.InitLogger();
    }
}

الآن هذا الأسلوب ([SetUp] InitializeLogger) سيتم تشغيل قبل أي اختبار تشغيل نفس واحدة ملحوظ مع [TearDown] سيتم تشغيل مرة واحدة كل الاختبارات يتم تشغيل.ولكن هنا هو الصيد ماذا أي و كل يعني في هذا السياق ؟ الاختبارات من الطبقات أعلن في نفس مساحة الاسم الدرجة ملحوظ مع [SetUpFixture].

على سبيل المثال ، على افتراض الهرمي مثل هذا:

- Tests
--- Business
----- TestsInitializer.cs // SetUpFixture class
----- FirstBusinessTests.cs
----- SecondBusinesTests.cs
--- ComplexLogic
----- VeryComplexLogicTests.cs

First و SecondBusinessTests سيتم تشغيل بعد SetUp من TestsInitializer, ومع ذلك VeryComplexLogicTests قد تشغيل في ترتيب عشوائي.

وفقا ربط الوثائق, إذا كنت تعلن SetUpFixture الطبقة الخارجية من أي مساحة ، والإعداد teardown ستطبق بالكامل الجمعية:

واحد فقط SetUpFixture ينبغي إنشاؤه في مساحة الاسم.أ SetUpFixture خارج أي مساحة يوفر الإعداد و تدمر الجمعية بأكملها.

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