c# - كيفية اختبار صحيح فئة مجردة



unit-testing visual-studio-2008 (1)

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

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

تحديث:

كما هو مطلوب في قسم التعليقات هنا مثال.

لنفترض أن لديك فئة الملخص التالية التي تريد اختبار الوحدة بها:

public abstract class FooBar
{
    public abstract string Foo { get; }

    public string GetTheFoo()
    {
        return "Here's the foo " + Foo;
    }
}

الآن في مشروع اختبار الوحدة الخاصة بك يمكنك تنفيذ ذلك عن طريق كتابة فئة مشتقة تنفيذ أعضاء مجردة مع قيم سخرية:

public class FooBarMock : FooBar
{
    public override string Foo 
    { 
        get { return "bar" } 
    }
}

ومن ثم يمكنك كتابة اختبار الوحدة الخاصة بك ضد طريقة GetTheFoo :

// arrange
var sut = new FooBarMock();

// act
var actual = sut.GetTheFoo();

// assert
Assert.AreEqual("Here's the foo bar", actual);

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

// arrange
var sut = new Mock<FooBar>();
sut.Setup(x => x.Foo).Returns("bar");

// act
var actual = sut.Object.GetTheFoo();

// assert
Assert.AreEqual("Here's the foo bar", actual);

أنا حاليا في عملية إنشاء اختبار وحدة لفئة مجردة، تسمى Component . VS2008 جمعت برنامج بلدي أي مشاكل لذلك كنت قادرا على إنشاء مشروع اختبار وحدة داخل الحل. شيء واحد لقد لاحظت، على الرغم من ذلك، هو أنه عندما تم إنشاء ملف الاختبار، وهناك هذه الأساليب التي لم أر من قبل:

internal virtual Component CreateComponent()
        {
            // TODO: Instantiate an appropriate concrete class.
            Component target = null;
            return target;
        }


internal virtual Component_Accessor CreateComponent_Accessor()
        {
            // TODO: Instantiate an appropriate concrete class.
            Component_Accessor target = null;
            return target;
        }

أفترض أن هذه هي لخلق فئة Component ملموسة.

ضمن كل طريقة اختبار، هناك هذا الخط:

Component target = CreateComponent(); // TODO: Initialize to an appropriate value

كيف يمكنني تهيئة هذا الأمر إلى قيمة مناسبة؟ أو، كيف يمكنني إنشاء فئة ملموسة مناسبة، كما هو موضح أعلاه من قبل CreateComponent_Accessor وطرق CreateComponent_Accessor ؟

هنا هو منشئ الطبقة المجردة، للحصول على معلومات إضافية:

protected Component(eVtCompId inComponentId, eLayer inLayerId, IF_SystemMessageHandler inMessageHandler)





visual-studio-2008