سؤال

نحن نستخدم TeamCity كما لدينا CI الخادم, و لقد بدأت رؤية "TestFixtureSetUp Failed" في فشل اختبار النافذة.

أي فكرة كيف يمكنني تصحيح هذه المشكلة ؟ اختبارات تشغيل غرامة على محطة (ص# اختبار عداء في VS2008).

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

المحلول

ومن قليلا من خلل في تنفيذ TestFixtureSetUp (وTestFixtureTearDown) أن أي استثناءات لا يتم الإبلاغ جيدا. كتبت تنفيذ أول منهم، وأنا لم يحصل ذلك للعمل على النحو الذي كان من المفترض أن. وفي الوقت اقترنت المفاهيم في قانون NUnit بإحكام على فكرة أن الإجراءات كانت مرتبطة مباشرة إلى اختبار واحد. لذلك تم المتعلقة بالإبلاغ عن كل شيء لنتيجة الاختبار. لم يكن هناك حقا مساحة للإبلاغ عن شيء حدث على مستوى جناح دون ضخمة إعادة الكتابة (أنها ليست إعادة بيع ديون عند تغيير الأغنام في المصعد).

وبسبب ذلك شيئا من التاريخ فإنه من الصعب معرفة ما حدث حقا في TestFixtureSetUp. ليس هناك مكان جيد لإرفاق الخطأ. الدعوة TestFixtureSetUp هي الآثار الجانبية لإجراء اختبار بدلا من أن تتعلق مباشرة به.

وTrueWill لديه فكرة الحق. تحقق من سجلات ثم قم بتعديل اختبار لإضافة المزيد من قطع الأشجار إذا لزم الأمر. قد ترغب في وضع في محاولة / صيد داخل TestFixtureSetup وتسجيل الكثير في كتلة الصيد. أنا بس أنا يمكن أن تضيف بعض المعلومات الأساسية لأنها (وبعبارة أخرى انها نوع من خطأي).

نصائح أخرى

وأنا سوف تحقق سجل بناء أولا.

وإذا لم يكن واضحا عن ذلك، قد تتمكن من محاولة منها Console.WriteLines في الاختبارات - أنا لست إيجابية، ولكن اعتقد ان هذه هي مكتوبة إلى سجل إنشاء. بالتناوب هل يمكن تسجيل الدخول إلى ملف (حتى باستخدام log4net إذا أردت الحصول على الهوى).

إذا لديك Visual Studio مثبت على الخادم CI، قد تتمكن من محاولة تشغيل بناء / الاختبارات من هناك. اذا كان مشكلة اتصال، التي قد حلها.

قضايا مسار

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

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

Exception testFixtureSetupException = null;

[TestFixtureSetUp]
public void FixtureSetup()
{
    try
    {
        // DoTestFixtureSetup
    }
    catch (Exception ex)
    {
        testFixtureSetupException = ex;
    }
}

[SetUp]
// NUnit doesn't support very useful logging of failures from a TestFixtureSetUp method. We'll do the logging here.
public void CheckForTestFixturefailure()
{         
    if (testFixtureSetupException != null)
    {
        string msg = string.Format("There was a failure during test fixture setup, resulting in a {1} exception. You should check the state of the storage accounts in Azure before re-running the RenewStorageAccountE2ETests. {0}Exception Message: {3}{0}Stack Trace:{4}",
            Environment.NewLine, testFixtureSetupException.GetType(), accountNamePrefix, testFixtureSetupException.Message, testFixtureSetupException.StackTrace);
        Assert.Fail(msg);
    }
 }

وكنت الحصول على نفس الخطأ أثناء تشغيل أي اختبار مع SpecFlow باستخدام Visual NUnit. عندما حاولت القيام بنفس الشيء من اختبار مستكشف وحدة (المقدمة من Resharper)، أنه أعطى قليلا رسالة أكثر فائدة: طرق ربط مع أكثر من 10 معلمات غير معتمدة. أدركت أنني لا يمكن أن يكون وسيلة SpecFlow مع أكثر من 10 بارامس، وكان لإزالة الاختبار.

وكنت قادرا على رؤية أن لم أكن خلق قاعدة بيانات الاختبار بلدي بشكل صحيح عن طريق القيام التحول السريع إلى VS وحدة اختبار. في حالتي كان قادرا على العودة إلى استجابة أفضل للسبب فشل. وعادة ما تستخدم NUnit. "غير قادر على إنشاء مثيل خطأ الدرجة X.: System.Data.SqlClient.SqlException: حدث خطأ في تفعيل ملف اسم الملف الفعلي '\ DbTest.mdf" قد تكون غير صحيحة تشخيص وأخطاء إضافية الصحيحة، وإعادة العملية.. فشل إنشاء قاعدة بيانات. لا يمكن إنشاء بعض أسماء الملفات المدرجة. تحقق الأخطاء المتعلقة .. "

تشغيل اختبار الوحدة في وضع التصحيح.قد تجد خطأ وقت التشغيل في الإعداد.

إذا كنت تستخدم SpecFlow وC # في Visual Studio، والنظر في ملف <whatever>.feature.cs الذي تم إنشاؤه تلقائيا بعد فشل الاختبار. على خط public partial class <whatever>Feature، يجب أن تشاهد الرمز الذي عندما حلقت فوق سيظهر السبب في أن الإعداد اعبا اساسيا NUnit فشل. في حالتي، كان ذلك بعض وسائل BeforeFeature بلدي في صفي TestHooks لم تكن ثابتة. كل BeforeTestRun، AfterTestRun، BeforeFeature، وأساليب AfterFeature يجب أن تكون ثابتة.

وكان لي هذه المسألة، وكان سبب ذلك بإضافة Dictionary للقراءة فقط خاصة في الصف، بنفس الطريقة التي قمت بإضافة private const string.

وحاولت أن تجعل Dictionary ثابت ولكنك لا تستطيع أن تفعل ذلك في وقت الترجمة. أنا تحل بذلك عن طريق وضع بلدي Dictionary في الأسلوب الذي يعود عليه.

وكان هذا العرض الناجم عن خطأ أثناء تهيئة المجال. إذا كان لديك تهيئة الحقول في طريقة [SetUp]، يجب أن تشاهد رسالة الخطأ أفضل.

[TestFixture]
internal class CommandParserTest
{
    // obscure error message
    private CommandParser parser = new CommandParser(...);
    ...
}

[TestFixture]
internal class CommandParserTest
{
    private CommandParser parser;

    [SetUp]
    public void BeforeTest()
    {
        // better error message
        parser = new CommandParser(...);
    }
    ...
}

واضطرب I هذا اليوم. فعلت ما يلي للحصول على الخطأ الفعلي.

و(1) اكتب اختبار آخر في مباراة منفصل تهيئة مثيل من المباراة اختبار مثير للقلق، ويدعو صراحة أساليب الإعداد مثل TestFixtureSetUp والإعداد إن وجدت، ومن ثم تنفيذ طريقة الاختبار الهدف.

و(2) إضافة استثناء معالجة التعليمات البرمجية لرمز جديد أعلاه، وتسجيل / الإخراج باستثناء الفعلي لمكان ما.

في حالة أنها يمكن أن تساعد أحدهم: يمكنك التقاط استثناء والكتابة في وحدة التحكم على TearDown

وشيء من هذا القبيل:

[SetUpFixture]
public class BaseTest
{
    private Exception caughtException = null;

    [SetUp]
    public void RunBeforeAnyTests()
    {
        try
        {
            throw new Exception("On purpose");
        }
        catch (Exception ex)
        {
            caughtException = ex;               
        }
    }

    [TearDown]
    public void RunAfterAnyTests()
    {
        if (caughtException != null)
        {
            Console.WriteLine(string.Format("TestFixtureSetUp failed in {0} - {1}", this.GetType(), caughtException.Message));
        }           
    }

}

وستكون النتيجة:

وفشل TestFixtureSetUp في IntegratedTests.Services.BaseTest - عن قصد

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