Тестирование классов в графических и консольных приложениях

Рейтинг: 2Ответов: 1Опубликовано: 29.10.2014

Я для диагностики классов всегда пишу функцию печати внутри самого класса для вывода в консоль. Не отразится ли это на графическом приложении? Стоит ли ее удалять после завершения?

Ответы

▲ 3
  1. Тесты, как правило, должны быть отделены от тестируемого функционала. Это верно на любом уровне, от юнит-тестов, до сложных интеграционных.
  2. Вы выводите какие-то результаты вызова функции или работы класса в консоль и проверяете их правильность визуально. Это чаще всего непродуктивный подход. Вы не сможете так проверять постоянно возрастающее количество функций и фич. В данном случае необходимы юнит-тесты. Это специально написанные функции, которые вызывают тестируемые функции с различными параметрами и проверяют соответствие реального и ожидаемого результата. Юнит-тесты обеспечивают регрессионное тестирование и позволяют сразу заметить, что в ранее работающий код был внесен баг. Достаточно хорошо про них отвечено здесь: Когда нужно начинать писать Unit тесты?
  3. Использовать вывод напрямую в консоль нежелательно. Используйте логгер — это специальный класс (или библиотека), который получает входящий поток сообщений и обрабатывает его заданным образом. Как правило, в логгерах доступны следующие функции:

    • Выбор уровня логирования. Вы можете показывать только сообщения об ошибках, либо их + обычные сообщения о работе, либо это всё + скрип каждой маленькой шестеренки.
    • Выбор способа вывода логов. Это может быть консоль, текстовый файл, что угодно еще или вообще ничего.

    С логгером вам не придется ничего удалять. Наоборот, во всех случаях возможной ошибки позаботьтесь о том, чтобы логировались все подробности ошибки, которые могут вам быть полезны для ее исправления. Когда вы будете делать билд приложения для пользователей, вы можете просто отключить логирование; можно также писать логи ошибок в файл и как-то пересылать файл разработчикам — это если клиентов немного, а поддержка важна.

Не уверен точно, но подозреваю, что если приложение пишет напрямую в std::cout, то можно запустить его из командной строки и читать логи. Не всегда эти логи предназначены для глаз пользователя.

К сожалению, я не могу подсказать вам конкретных решений на c++, но я уверен, что они существуют, и не в единственном экземпляре.

Примеры:

  1. Юнит-тесты для Git.
  2. Код с логами для Chromium, см. строчки с DVLOG() (спасибо Abyx за ссылку).