سؤال

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

[Test]
public void create_person_event_handler_is_hooked_up_by_windsor()
{
    IChangePersonService changePersonService = IoC.Resolve<IChangePersonService>();

    // check that changePersonService.PersonCreated has a handler attached
}

وأنا لست متأكدا من كيفية اختبار أن changePersonService.PersonCreated وأي شيء تعلق على رغم ذلك.

وأي أفكار؟

وشكرا.

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

المحلول

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

وانظر هذا المثال:

public class MyChangePersonService : IChangePersonService
{
    private IList<EventHandler> handlers;

    private EventHandler _personEvent;

    public event EventHandler PersonCreated
    {
        add
        {
            _personEvent += value;
            handlers.Add(value);
        }

        remove
        {
            _personEvent -= value;
            handlers.Remove(value);
        }
    }

    public IList<EventHandler> PersonEventHandlers { get { return handlers; } }

    public MyChangePersonService()
    {
        handlers = new List<EventHandler>();
    }

    public void FirePersonEvent()
    {
        _personEvent(this, null);
    }
}

وثم هل يمكن الوصول إلى معالجات مسجلة لدى PersonEventHandlers دعم.

هل يمكن ان تنفذ شيئا من هذا القبيل؟

نصائح أخرى

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

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

وأخيرا، أريد أن اختبار هذا التكوين بلدي بشكل صحيح ربط الأحداث حتى كما أريد، لكنني لست متأكدا من أن C # واسمحوا لي دون تغيير API بلدي كما يقول يوفال.

ويبدو أنك تحاول <م> همز بعض المعلومات من وجوه الخاص بك من أجل <م> ASSERT هو شيء واحد أو آخر. لاحظ أن هذا ليس بالضرورة وحدة الاختبار، لأنك لا اختبار وظيفة.

إذا يجب اختبار ذلك، يبدو وكأنك سوف تحتاج إلى فتح API العام في IChangePersonService من أجل الحصول على معالجات الأحداث المسجلة.

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