Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Output streams testing tool

Boost , Boost.Test , Writing unit tests

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Как выполнить тест на правильность

operator<< ( std::ostream &, ... )

Операции?

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

Вы можете использовать<std::stringstream>и сравнить полученный буфер вывода с ожидаемой строкой шаблона, но вам необходимо выполнить несколько дополнительных операций с каждой проверкой, которую вы делаете. Это становится утомительным очень быстро.

Класс<boost::test_tools::output_test_stream>предназначен для автоматизации этих задач. Это простой, но мощный инструмент для тестирования стандартной<std::ostream>работы вывода. Класс<output_test_stream>соответствует интерфейсу<std::ostream>, поэтому его можно использовать вместо любого параметра<std::ostream>. Он предоставляет несколько методов тестирования для проверки выходного содержимого, включая тест на соответствие ожидаемому выходному содержимому или тест на ожидаемую длину выхода. Смывка, синхронизация, сравнение строк и генерация сообщений об ошибках автоматизируются реализацией инструмента.

Все<output_test_stream>функции валидации по умолчанию промывают поток после выполнения проверки. Если вы хотите выполнить несколько проверок с одинаковым выходом, укажите параметр<flush_stream>со значением<false>.

В некоторых случаях ручная генерация ожидаемой продукции либо слишком трудоемка, либо вообще невозможна из-за огромного объема. Возможный способ решения этой проблемы состоит в разделении теста на два этапа:

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

Класс<output_test_stream>позволяет как сопоставлять выходное содержимое с файлом шаблона, так и генерировать этот файл шаблона. Параметр командной строки<save_pattern>может использоваться для создания нового файла шаблона или для проверки существующего шаблона.

Usage

Существует два способа использования класса<output_test_stream>:

  1. Эксплицитные проверки выходных данных и
  2. Соответствие файла шаблона
Explicit output checks

Используйте экземпляр класса<output_test_stream>в качестве выходного потока и проверьте выходное содержимое с помощью методов инструмента.

Example: Explicit output checks with output_test_stream

Код

<
#defineBOOST_TEST_MODULEexample
#include<boost/test/included/unit_test.hpp>
#include<boost/test/output_test_stream.hpp>
usingboost::test_tools::output_test_stream;
BOOST_AUTO_TEST_CASE(test)
{
 output_test_streamoutput;
 inti=2;
 output<<"i="<<i;
 BOOST_TEST(!output.is_empty(false));
 BOOST_TEST(output.check_length(3,false));
 BOOST_TEST(output.is_equal("i=3"));
}
>

выход

<
>example
Running1testcase...
test.cpp(15):errorin"test":checkoutput.is_equal("i=3")hasfailed.Outputcontent:"i=2"
***1failuresisdetectedintestsuite"example"
>
[Note] Note

Использование<false>для предотвращения промывки вывода в первых двух вызовах контрольных функций. Если вы не хотите выполнять несколько различных проверок для одного и того же вывода, вам не нужно использовать его. Ваш тест будет выглядеть как последовательность операторов вывода, за которой следует одна проверка.

[Tip] Tip

Старайтесь проводить проверки как можно чаще. Это не только упрощает модели, с которыми вы сравниваете, но и позволяет более точно определить возможный источник отказа.

Pattern file matching

файл шаблонаявляется файлом-компаньоном, содержащим шаблоны, которым должен соответствовать поток. Ваше тестирование будет выглядеть как серия операторов вывода, за которыми следуют проверки соответствия, повторяющиеся несколько раз.

В приведенном ниже примере файл<pattern_file>содержит шаблоны, которые должны совпадать.

i=2
File: test.cpp Line:XXX
Example: Pattern file matching with output_test_stream

Код

<
#defineBOOST_TEST_MODULEexample
#include<boost/test/included/unit_test.hpp>
#include<boost/test/output_test_stream.hpp>
usingboost::test_tools::output_test_stream;
BOOST_AUTO_TEST_CASE(test)
{
 output_test_streamoutput("pattern_file",true);
 inti=2;
 output<<"i="<<i;
 BOOST_TEST(output.match_pattern());
 output<<"\nFile: "<<__FILE__<<" Line:YYY";
 BOOST_TEST(output.match_pattern());1
}
>

1

Эта строка генерирует строку ошибки: YYY! = Линия: XXX

выход

<
>example
Running1testcase...
test.cpp(16):errorin"test":checkoutput.match_pattern()hasfailed.Mismatchatposition23
...5...
...4...
***1failuresisdetectedintestsuite"example"
>
[Tip] Tip

Старайтесь проводить проверки как можно чаще, поскольку это позволяет более точно определить возможный источник сбоя.



Этот параметр поддерживается всеми методами сравнения, см. Класс<documentation.>


PrevUpHomeNext

Статья Output streams testing tool раздела Boost.Test Writing unit tests может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Writing unit tests ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:47:34/0.0050530433654785/0