Optionsclick getestet Unsere Erfahrung im Test

Beste Broker fur Binare Optionen 2020:
  • Binarium
    Binarium

    Der beste Broker fur binare Optionen fur 2020!
    Ideal fur Anfanger!
    Kostenloser Unterricht!

  • FinMax
    FinMax

    2 Platz in der Rangliste! Zuverlassiger Broker.

Введение в среду Google C++ Testing Framework

Узнайте об основных возможностях, обеспечивающих удобное использование в рабочей среде

Для чего нужна Google C++ Testing Framework?

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

Некоторые категории тестов сталкиваются с проблемами памяти, проявляющимися только при определенных условиях. Среда тестирования от Google имеет отличную поддержку для обработки таких ситуаций. С помощью платформы от Google вы можете выполнять один и тот же тест тысячи раз. При первом обнаружении проблемы автоматически вызывается отладчик. Все это может быть проделано с помощью всего лишь двух опций командной строки: –gtest_repeat=1000 –gtest_break_on_failure .

В отличие от множества других систем тестирования, платформа компании Google содержит встроенные правила, которые можно размещать в программном коде с отключенной (в целях повышения производительности) обработкой исключений. Таким образом, правила также могут безопасно использоваться в деструкторах.

Запустить тесты достаточно просто. Просто вызовите встроенный макрос RUN_ALL_TESTS вместо того, чтобы отдельно создавать для выполнения теста новый или производный выполняемый класс. Это существенное отличие от таких платформ, как, например, CppUnit.

Вы можете легко создать отчет в формате XML (Extensible Markup Language) с помощью опции –gtest_output=“xml: “ . Для вывода XML-отчета в таких системах, как CppUnit и CppTest, вам необходимо написать существенно больший объем кода.

Создание базового теста

Рассмотрим макет простой функции вычисления квадратного корня, показанный в листинге 1.

Листинг 1. Макет функции вычисления квадратного корня

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

Листинг 2. Модульный тест для функции вычисления квадратного корня

В листинге 2 создается иерархия тестов с именем SquareRootTest , а затем к ней добавляются два модульных теста с именами PositiveNos и ZeroAndNegativeNos . TEST – это встроенный макрос, определенный в модуле gtest.h (доступен с загружаемым исходным кодом) и помогающий создать иерархию. EXPECT_EQ и ASSERT_EQ также являются макросами — в первом случае контрольного примера выполнение теста продолжается даже при возникновении ошибки, в то время как во втором случае в этой ситуации выполнение теста прекращается. Безусловно, если квадратный корень из 0 отнюдь не 0, то в любом случае, тестировать особо нечего. Вот почему в тесте ZeroAndNegativeNos используется макрос ASSERT_EQ , тогда как в тесте PositiveNos используется макрос EXPECT_EQ , показывающий, сколько было случаев, когда функция вычисления квадратного корня завершалась с ошибкой, но выполнение теста не прекращалось.

Beste Broker fur Binare Optionen 2020:
  • Binarium
    Binarium

    Der beste Broker fur binare Optionen fur 2020!
    Ideal fur Anfanger!
    Kostenloser Unterricht!

  • FinMax
    FinMax

    2 Platz in der Rangliste! Zuverlassiger Broker.

Запуск первого теста

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

Листинг 3. Запуск теста функции вычисления квадратного корня

Метод ::testing::InitGoogleTest работает в соответствии со своим названием – он инициализирует платформу, и его необходимо вызвать перед функцией RUN_ALL_TESTS . Функцию RUN_ALL_TESTS необходимо вызвать всего один раз, так как множественные вызовы этой функции не поддерживаются, поскольку конфликтуют с некоторыми расширенными возможностями платформы. Обратите внимание на то, что функция RUN_ALL_TESTS автоматически определяет и запускает все тесты, определенные с помощью макроса TEST . По умолчанию результат выводится на устройство стандартного вывода. В листинге 4 показан результат выполнения теста.

Листинг 4. Вывод теста функции вычисления квадратного корня

Дополнительные опции Google C++ Testing Framework

Из листинга 3 видно, что функция InitGoogleTest принимает и загружает аргументы в тестовую инфраструктуру. В этом разделе рассматриваются некоторые полезные действия, которые вы можете проделывать с этими аргументами.

Вы можете выгрузить вывод в файл формата XML, указав в командной строке опцию –gtest_output=“xml:report.xml“ . Конечно, вы можете заменить имя report.xml любым другим на свое усмотрение.

Существуют определенные тесты, которые иногда завершаются с ошибкой, но в большинстве случаев выполняются успешно. Это присуще проблемам, связанным с ошибкой в памяти. В таких случаях возможность выявить ошибку будет выше, если тесты выполняются множество раз. Если вы укажете в командной строке опции –gtest_repeat=2 –gtest_break_on_failure , то один и тот же тест будет выполнен дважды. Если тест завершается с ошибкой, автоматически вызывается отладчик.

Не все тесты бывает необходимо запускать каждый раз, особенно если вы вносите изменения в код только определенных модулей. Для этого система тестирования от Google предоставляет в ваше распоряжение опцию –gtest_filter= . Маска представляет собой набор регулярных выражений, разделенных двоеточиями (:). Например, опция –gtest_filter=* запускает все тесты, а опция –gtest_filter=SquareRoot* запускает только тесты группы SquareRootTest . Если вы хотите запустить тесты группы SquareRootTest только для положительных значений, используйте опцию –gtest_filter=SquareRootTest.*-SquareRootTest.Zero* . Обратите внимание на то, что маска SquareRootTest.* включает выполнение всех тестов группы SquareRootTest , а маска -SquareRootTest.Zero* исключает выполнение тестов, имена которых начинаются с Zero.

В листинге 5 приведен пример запуска группы тестов SquareRootTest с использованием опций gtest_output , gtest_repeat и gtest_filter .

Листинг 5. Запуск тестов SquareRootTest с опциями gtest_output , gtest_repeat и gtest_filter

Временное отключение тестов

Предположим, вы приостановили выполнение определенной части кода. Можно ли временно отключить тест? Да, просто добавьте префикс DISABLE_ к логическому имени теста или к имени отдельного его модуля, и он перестанет выполняться. В листинге 6 показано, что вам необходимо сделать для того, чтобы отключить выполнение теста PositiveNos , приведенного ранее в листинге 2.

Листинг 6. Временное отключение тестов

Обратите внимание на то, что по окончании выполнения тестов среда тестирования Google выводит предупреждение о том, что имеются отдельные отключенные тесты. Это показано в листинге 7.

Листинг 7. Предупреждение среды Google об отключенных тестах

Если вы хотите продолжить выполнение отключенных тестов, укажите в командной строке опцию -gtest_also_run_disabled_tests . В листинге 8 показан результат работы программы, когда запускается тест DISABLE_PositiveNos .

Листинг 8. Google позволяет запускать отключенные тесты

Все о правилах

Платформа тестирования компании Google содержит в себе множество предопределенных правил. Существует два типа правил – правила, имена которых начинаются с ASSERT_ , и правила, имена которых начинаются с EXPECT_ . Правила ASSERT_* прерывают выполнение программы при нарушении условия, тогда как в случае правил EXPECT_* выполнение программы продолжается. В обоих случаях при нарушении условий система выводит имя файла, номер строки и сообщение, которое вы можете определить самостоятельно. Одними из несложных правил являются ASSERT_TRUE (условие) и ASSERT_NE (значение1, значение2) . Первое из них предполагает, что указанное условие всегда должно выполняться, а второе – что два значения не должны совпадать. Эти правила также работают с определенными пользователями типами данных, но при этом вы должны выполнить перегрузку соответствующего оператора сравнения (==, !=,

Почему нужны отдельные макросы для сравнения чисел с плавающей запятой? Разве не будет работать правило ASSERT_EQ ? Ответ заключается в том, что ASSERT_EQ и связанные с ним макросы могут работать, а могут и не работать, и поэтому лучше использовать макросы, специально предназначенные для сравнения чисел с плавающей запятой. Обычно различные центральные процессоры и рабочие окружения хранят числа с плавающей запятой по-разному, и простые сравнения ожидаемых и фактических значений не работают. Например, правило ASSERT_FLOAT_EQ (2.00001, 2.000011) сработает – Google не возвращает ошибок, если значения совпадают с точностью до четырех десятичных знаков. Если вам необходима более высокая точность, используйте правило ASSERT_NEAR (2.00001, 2.000011, 0.0000001) , и тогда вы получите ошибку, показанную в листинге 10.

Листинг 10. Сообщение об ошибке, выводимое правилом ASSERT_NEAR

„Смертельные“ тесты

В системе Google C++ Testing Framework имеется интересная категория правил ( ASSERT_DEATH , ASSERT_EXIT и т. д.), называющихся „смертельными“ правилами. Эти правила используются для проверки того, было ли какое-либо сообщение об ошибке получено в результате передачи на вход функции некорректных данных, или же работа этой функции была завершена в соответствии с заранее определенным кодом завершения. Например, возвращаясь к листингу 3, неплохо было бы получить сообщение об ошибке при выполнении функции square-root (-22.0) и выйти из программы со статусом -1 вместо получения значения -1.0 . В листинге 11 для такого сценария используется правило ASSERT_EXIT .

Листинг 11. Выполнение „смертельного“ теста платформы Google

Правило ASSERT_EXIT проверяет, была ли функция завершена в соответствии с заданным кодом завершения (т. е. аргументом функций exit или _exit ), и сравнивает заключенную в кавычки строку с тем, что выводит функция на стандартное устройство сообщений об ошибках. Обратите внимание на то, что сообщения об ошибках должны выводиться на устройство std::cerr , а не на std::cout . В листинге 12 представлены макеты для правил ASSERT_DEATH и ASSERT_EXIT .

Листинг 12. Макеты для „смертельных“ правил

Google предоставляет в ваше распоряжение встроенный предикат ::testing::ExitedWithCode(код_завершения) . Результат этого предиката будет истинным только в том случае, если программа завершается с тем же кодом завершения, что и аргумент код_завершения этого предиката. Правило ASSERT_DEATH проще, чем правило ASSERT_EXIT – оно просто сравнивает сообщение об ошибке, выводимое на стандартное устройство, с ожидаемым сообщением, заданным пользователем.

Понимание тестовых фикстур

Перед началом модульного тестирования, как правило, выполняется некоторая пользовательская инициализация. Например, если вы пытаетесь определить время выполнения теста и занимаемый им объем памяти, то вам необходимо написать для этого теста определенный код, позволяющий измерить эти значения. Здесь в дело вступают фикстуры, помогающие вам настраивать такие тестовые окружения. В листинге 13 показано, как выглядит класс тестовой фикстуры.

Листинг 13. Класс тестовой фикстуры

Класс фикстуры является производным от класса ::testing::test , объявленного в модуле gtest.h . В листинге 14 приведен пример, в котором используется класс фикстуры. Обратите внимание на то, что в данном примере вместо макроса TEST используется макрос TEST_F .

Листинг 14. Пример использования фикстуры

Ниже перечислены несколько условий, которые необходимо учитывать при использовании фикстур:

  • Вы можете выполнить инициализацию или распределение ресурсов как с помощью конструктора, так и с помощью метода SetUp – выбор остается за вами.
  • Вы можете освобождать ресурсы с помощью метода TearDown или с помощью функции деструктора. Однако если вы хотите использовать обработку исключений, вы должны делать это только через метод TearDown , поскольку вызов исключения в деструкторе может привести к непредсказуемым результатам.
  • Макросы правил Google могут вызывать исключения на тех платформах, для которых они доступны в будущих версиях. Поэтому для лучшего сопровождения программ хорошо использовать макросы правил в коде метода TearDown .
  • Одни и те же фикстуры не используются в различных тестах. Для каждого нового модульного теста система создает новую тестовую фикстуру. Так что в листинге 14 метод SetUp (пожалуйста, используйте здесь правильную орфографию) вызывается дважды, потому что создаются два объекта myFixture1 .

Заключение

В этой статье мы лишь поверхностно рассмотрели платформу Google C++ Testing Framework. Подробная документация по этой платформе доступна на сайте компании Google. Для профессиональных разработчиков я рекомендую ознакомиться с дополнительными материалами об открытых платформах регрессионного тестирования, таких как Boost unit test framework и CppUnit. Для получения дополнительной информации обратитесь к разделу Ресурсы.

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи „A quick introduction to the Google C++ Testing Framework“ (EN).
  • Прочитайте статью Google TestPrimer (EN), чтобы начать работу с Google C++ Testing Framework.
  • Для более подробного изучения Google C++ Testing Framework ознакомьтесь с руководством Google TestAdvancedGuide (EN).
  • На странице Google TestFAQ (EN) вы найдете советы и ответы на часто задаваемые вопросы, касающиеся платформы Google C++ Testing Framework.
  • Прочитайте статью „Open source C/C++ unit testing tools, Part 1: Get to know the Boost unit test framework“ (EN) (developerWorks, декабрь 2009).
  • Прочитайте статью „Open source C/C++ unit testing tools, Part 2: Get to know CppUnit“ (EN) (developerWorks, январь 2020).
  • Для получения дополнительной информации о сравнении чисел с плавающей запятой ознакомьтесь со статьями What Every Computer Scientist Should Know About Floating-Point Arithmetic (EN) Дэвида Голдберга (David Goldberg) и Comparing floating point numbers (EN) Брюса Доусона (Bruce Dawson).
  • Загрузите Google C++ Testing Framework.
  • Загрузите ознакомительные версии программного обеспечения IBM или работайте с онлайновыми пробными версиями на странице IBM SOA Sandbox. Познакомьтесь с инструментами для разработчиков и межплатформенными приложениями от DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

Google testing framework (gtest)

Ключевые понятия

Ключевым понятием в Google test framework является понятие утверждения (assert). Утверждение представляет собой выражение, результатом выполнения которого может быть успех (success), некритический отказ (nonfatal failure) и критический отказ (fatal failure). Критический отказ вызывает завершение выполнения теста, в остальных случаях тест продолжается. Сам тест представляет собой набор утверждений. Кроме того, тесты могут быть сгруппированы в наборы (test case). Если сложно настраиваемая группа объектов должна быть использована в различных тестах, можно использовать фиксации (fixture). Объединенные наборы тестов являются тестовой программой (test program).

Утверждения (assertion)

Утверждения, порождающие в случае их ложности критические отказы начинаются с ASSERT_, некритические — EXPECT_. Следует иметь ввиду, что в случае критического отказа выполняется немедленный возврат из функции, в которой встретилось вызвавшее отказ утверждение. Если за этим утверждением идет какой-то очищающий память код или какие-то другие завершающие процедуры, можете получить утечку памяти.

Имеются следующие утверждения (некритические начинаются не с ASSERT_, а с EXPECT_):

Простейшие логические

Сравнение

  • ASSERT_EQ(expected, actual); — =
  • ASSERT_NE(val1, val2); — !=
  • ASSERT_LT(val1, val2); —
  • ASSERT_GE(val1, val2); — >=

Сравнение строк

  • ASSERT_STREQ(expected_str, actual_str);
  • ASSERT_STRNE(str1, str2);
  • ASSERT_STRCASEEQ(expected_str, actual_str); — регистронезависимо
  • ASSERT_STRCASENE(str1, str2); — регистронезависимо

Проверка на исключения

  • ASSERT_THROW(statement, exception_type);
  • ASSERT_ANY_THROW(statement);
  • ASSERT_NO_THROW(statement);

Проверка предикатов

    ASSERT_PREDN(pred, val1, val2, . valN); — N (). Компиляция пройдет с ошибкой в случае несовпадения типов T1 и T2.

В случае ложности утверждения, выдаются данные, использованные в утверждении. Кроме того, можно задать собственный комментарий:

Можно использовать расширенные наборы символов (wchar_t) как в комментариях, так и в утверждениях, касающихся строк. При этом выдача будет в UTF-8 кодировке.

Тесты (tests)

Для определения теста используется макрос TEST. Он определяет void функцию, в которой можно использовать утверждения. Как отмечалось ранее, критический отказ вызывает немедленный возврат из функции.

TEST принимает 2 параметра, уникально идентифицирующие тест, — название тестового набора и название теста. В рамках одного и того же тестового набора названия тестов не должны совпадать. Если название начинается с DISABLED_, это означает, что вы пометили тест (набор тестов) как временно не используемый.

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

Фиксации (fixtures)

Случается, что объекты, участвующие в тестировании, сложно настраиваются для каждого теста. Можно задать процесс настройки один раз и исполнять его для каждого теста автоматически. В таких ситуациях используются фиксации.

Фиксация представляет собой класс, унаследованный от ::testing::Test, внутри которого объявлены все необходимые для тестирования объекты при этом в конструкторе либо функции SetUp() выполняется их настройка, а в функции TearDown() освобождение ресурсов. Сами тесты, в которых используются фиксации, должны быть объявлены с помощью макроса TEST_F, в качестве первого параметра которого должно быть указано не название набора тестов, а название фиксации.

Для каждого теста будет создана новая фиксация, настроена с помощью SetUp(), запущен тест, освобождены ресурсы с помощью TearDown() и удален объект фиксации. Таким образом каждый тест будет иметь свою копию фиксации «не испорченную» предыдущим тестом.

В некоторых случаях создание тестируемых объектов является очень дорогой операцией, а тесты не вносят никаких изменений в объекты. В таком случае можно не создавать фиксации заново для каждого теста, а использовать распределенную фиксацию с глобальным SetUp()и TearDown(). Фиксация автоматически становится распределенной, если в классе имеется хотя бы один статический член. Статические функции SetUpTestCase() и TearDownTestCase() будут вызываться для настройки объекта и освобождения ресурсов соответственно. Таким образом, набор тестов перед первым тестом вызовет SetUpTestCase(), а после последнего TearDownTestCase().

Если существует потребность в SetUp() и TearDown() для всей программы тестирования, а не только для набора теста, необходимо создать класс-наследник для ::testing::Environment, переопределить SetUp() и TearDown() и зарегистрировать его с помощью функции AddGlobalTestEnvironment.

Запуск тестов

Объявив все необходимые тесты, мы можем запустить их с помощью функции RUN_ALL_TESTS(). Функцию можно вызывать только один раз. Желательно, чтобы тестовая программа возвращала результат работы функции RUN_ALL_TESTS(), так как некоторые автоматические средства тестирования определяют результат выполнения тестовой программы по тому, что она возвращает.

Флаги

Вызванная перед RUN_ALL_TESTS() функция InitGoogleTest(argc, argv) делает вашу тестовую программу не просто исполняемым файлом, выводящим на экран результаты тестирования. Это целостное приложение, принимающие на вход параметры, меняющие его поведение. Как обычно ключи -h, –help дадут вам список всех поддерживаемых параметров. Перечислю некоторые из них (за полным списком можно обратиться к документации).

  • ./test –gtest_filter=TestCaseName.*-TestCaseName.SomeTest — запустить все тесты набора TestCaseName за исключением SomeTest
  • ./test –gtest_repeat=1000 –gtest_break_on_failure — запустить тестирующую программу 1000 раз и остановиться при первой неудаче
  • ./test –gtest_output=«xml:out.xml» — помимо выдачи в std::out будет создан out.xml — XML отчет с результатами выполнения тестовой программы
  • ./test –gtest_shuffle — запускать тесты в случайном порядке

Если вы используете какие-то параметры постоянно, можете задать соответствующую переменную окружения и запускать исполняемый файл без параметров. Например задание переменной GTEST_ALSO_RUN_DISABLED_TESTS ненулевого значения эквивалентно использованию флага –gtest_also_run_disabled_tests.

Вместо заключения

В данном посте я кратко пробежался по основным функциям Google Test Framework. За более подробными сведениями следует обратиться к документации. Оттуда вы сможете почерпнуть информацию о ASSERT_DEATH используемом при падении программы, о ведении дополнительных журналов, о параметризованных тестах, настройке вывода, тестировании закрытых членов класса и многое другое.

UPD: По справедливому замечанию хабрапользователя nikel добавлена краткая инофрмация по использованию флагов.
UPD 2: Исправление разметки после изменений на Хабре (нативный тег source).

Материалы на экзамен на Сертификат B1 DTZ

Материалы на экзамен на Сертификат B1 DTZ Deutsch-Test für Zuwanderer + полезные ссылки
Здесь вы сможете скачать тесты, упражнения, аудио материалы для лучшей подготовки к экзамену на Сертификат B1 DTZ .
П.с. все эти материалы также есть в свободном доступе в сети интернет.

Ссылки, которые могут вам помочь (нажимайте прямо на названия):

Для подготовки к экзамену Test «Leben in Deutschland»/Einbürgerungstest

Похожие статьи:

Также интересно:

Если Вам понравилась статья, поделитесь ею в соц.сети ниже (кнопочки)=) Возможно кому-нибудь еще она будет интересна и полезна. Заранее спасибо вам мои дорогие читатели! Подписывайтесь на блог, оставляйте комментарии=)

Beste Broker fur Binare Optionen 2020:
  • Binarium
    Binarium

    Der beste Broker fur binare Optionen fur 2020!
    Ideal fur Anfanger!
    Kostenloser Unterricht!

  • FinMax
    FinMax

    2 Platz in der Rangliste! Zuverlassiger Broker.

Binäre Optionen: So wählen Sie einen Broker aus
Schreibe einen Kommentar

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: