Как написать модульные тесты для приложения, управляемого событиями, которым управляет libevent? - PullRequest
3 голосов
/ 19 января 2012

Я пишу приложение, управляемое событиями, используя библиотеку libevent для асинхронного ввода-вывода.По сути, в приложении есть evconnlistener, прослушивающий данные через порт.При получении данных данные пересылаются в соответствующую конечную точку http REST в зависимости от полезной нагрузки данных.Компонент пересылки использует evhttp_ *, предоставленный libevent.

Я могу протестировать приложение как внешний процесс, чтобы убедиться в его работоспособности, однако я не уверен, что нужно создавать отчеты о покрытии кода.Как мне написать модульные тесты, которые можно вызывать с помощью обычных структур модульного тестирования, таких как cppunit?

1 Ответ

4 голосов
/ 16 февраля 2012

Добавить слой-обертку вокруг асинхронных вызовов ввода / вывода.Затем вы можете заменить класс «MockIO» для проверки ваших тестов при обработке соединений ввода-вывода.

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

Один модульный тест должен убедиться, что данные были получены из события ввода-вывода.Отдельный тест должен был убедиться, что данные, введенные в конечную точку REST, были получены правильно.Другой отдельный тест должен был убедиться, что конечная точка REST выполняет его разбор по желанию.Что касается тестов событий ввода-вывода, я бы добавил больше модульных тестов для имитации сбоя ввода-вывода, разрывов соединений и других несчастных путей, чтобы убедиться, что код обработки исключений функционировал правильно, и что все строки кода в этомМодуль был протестирован.Точно так же я бы также проверил конечную точку со всеми видами неверных входных данных: нулевые указатели, пустые буферы, очень длинные буферы, неожиданные типы данных, любые другие тесты, которые понадобятся для прохождения всех путей через метод.

Мы стремимся (но не всегда достигаем) полного охвата кода в модульных тестах.Интеграционные тесты показывают, что части успешно объединяются, но мы не всегда можем проверить каждое взаимодействие.Большим предположением является то, что если модульные тесты пройдены, части должны хорошо работать вместе, независимо от того, что они делают.

Я думаю, что книга могла бы лучше помочь вам прорваться через фазу "тупика", даваялучшая общая картина автоматизированного модульного тестирования.Если вы пытаетесь добавить модульные тесты в существующий проект, книга Майкла Фезерса «Эффективная работа с унаследованным кодом» просто великолепна (Майк является автором CppUnit.) Если вы только начинаете с небольшого проекта, The Art ofМодульное тестирование Роя Ошерова - хорошее чтение.И как только вы освоите идеи модульного тестирования, xUnit Test Patterns от Gerard Meszaros станет отличным ресурсом, который поможет вам научиться писать поддерживаемые тесты.

А если у вас есть возможность, потратьте некоторое время на качественное тестирование.учиться у наставника.

...