Вопрос

Я хочу проверить, что классу присвоен EventHandler событию.По сути, я использую свой IoC-контейнер для подключения EventHandlers для себя, и я хочу проверить, что они назначены правильно.Итак, на самом деле я тестирую свою конфигурацию IoC.

[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);
    }
}

Затем вы можете получить доступ к зарегистрированным обработчикам с помощью prop PersonEventHandlers.

Можете ли вы реализовать что-то подобное?

Другие советы

Мне кажется, вы пытаетесь провести модульное тестирование Castle Windsor.Поскольку у него, вероятно, уже есть модульные тесты, я считаю, что это пустая трата усилий.Вам лучше проверить, что ваш объект вызывает соответствующие события в нужное время (возможно, зарегистрировав фиктивный объект в качестве обработчика событий).

На самом деле это не модульное тестирование, это интеграционный тест.И я тестирую не Castle Windsor, а мою его конфигурацию.Я проверяю, все ли мои несвязанные классы подключаются так, как я намереваюсь.

В конечном счете, я хочу проверить, правильно ли моя конфигурация подключает события так, как я хочу, но я не уверен, что C# позволит мне не менять мой API, как говорит Юваль.

Похоже, ты пытаешься подталкивать некоторую информацию из вашего объекта, чтобы утверждать это то или иное.Обратите внимание: это не обязательно модульное тестирование, поскольку вы не тестируете функциональность.

Если вам нужно это протестировать, похоже, вам нужно будет открыть общедоступный API в IChangePersonService чтобы получить зарегистрированные обработчики событий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top