Сравнение платформ модульных тестов c++ [закрыто]
Я знаю, что уже есть несколько вопросов относительно рекомендаций для фреймворков модульного тестирования c++, но все ответы не помогли, поскольку они просто рекомендуют одну из фреймворков, но не предоставляют никакой информации о сравнении (функции).
Я думаю, что наиболее интересными фреймворками являются CppUnit, Boost и новая платформа тестирования Google. Кто-нибудь уже проводил сравнение?
10 ответов:
посмотреть здесь для некоторого обсуждения.
они рекомендуют статей: изучение C++ Unit Testing Framework Jungle, Ноэль Ллопис. И более поздние: C++ Test Unit Framework
Я еще не нашел статью, которая сравнивает googletest с другими фреймворками.
новый игрок Google Test (также известный как Google C++ Testing Framework), который довольно приятно, хотя.
#include <gtest/gtest.h> TEST(MyTestSuitName, MyTestCaseName) { int actual = 1; EXPECT_GT(actual, 0); EXPECT_EQ(1, actual) << "Should be equal to one"; }основные характеристики:
- портативный
- смертельный и некритических утверждений
- легкие утверждения информативны сообщения:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;- Google Test автоматически обнаруживает ваши тесты и не требует вас чтобы перечислить их, чтобы запустить их
- легко расширения ваш словарь утверждений
- тесты на смерть (см. расширенное руководство)
SCOPED_TRACEдля подпрограммы, циклы- вы можете решить какие тесты запускать
- XML генерация отчета об испытаниях
- светильники/Mock / Шаблоны...
Я только что толкнул свою собственную структуру,лови, там. Он все еще находится в стадии разработки, но я считаю, что он уже превосходит большинство других фреймворков. У разных людей разные критерии, но я пытался охватить большую часть земли без слишком большого количества компромиссов. Взгляните на мою связанную запись в блоге для дегустатора. Мои пять лучших функций:
- только заголовок
- автоматическая регистрация тестов на основе функций и методов
- разлагает стандартный C++ выражения в LHS и RHS (поэтому вам не нужно целое семейство макросов assert).
- поддержка вложенных разделов в функции на основе приспособления
- тесты имен с использованием естественного языка-имена функций/ методов генерируются
Он также имеет привязки Objective-C. Проект размещен на Github
Boost Test Library - это очень хороший выбор, особенно если вы уже используете подталкивания.
// TODO: Include your class to test here. #define BOOST_TEST_MODULE MyTest #include <boost/test/unit_test.hpp> BOOST_AUTO_TEST_CASE(MyTestCase) { // To simplify this example test, let's suppose we'll test 'float'. // Some test are stupid, but all should pass. float x = 9.5f; BOOST_CHECK(x != 0.0f); BOOST_CHECK_EQUAL((int)x, 9); BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001% }Он поддерживает:
- автоматическая или ручные тесты Регистрация
- многие утверждения
- автоматическое сравнение коллекции
- различные форматы вывода (в том числе XML)
- светильники / Шаблоны...
PS: я написал об этом статью, которая может помочь вам начать работу:C++ Unit Testing Framework: Учебник По Тестированию Boost
Википедия имеет всеобъемлющий список платформ модульного тестирования, с таблицами, которые идентифицируют функции, поддерживаемые или нет.
Я недавно освобожден xUnit++, в частности, в качестве альтернативы тесту Google и библиотеке тестов Boost (см. сравнения). Если вы знакомы с xUnit.Net, вы готовы к xUnit++.
#include "xUnit++/xUnit++.h" FACT("Foo and Blah should always return the same value") { Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\"."; Assert.Equal(Foo(), Blah()); } THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected), std::make_tuple(0, "0"), std::make_tuple(1, "1"), std::make_tuple(2, "2")) { Assert.Equal(expected, Foo(input)); }основные характеристики:
- невероятно быстро: тесты по совместительству.
- портативный
- автоматическаясоответствующего
- имя подстроки matchin
- Тестов
CppUTest - очень хороший, легкий вес рамки с макетом библиотек. Стоит взглянуть поближе.
CPUnit (http://cpunit.sourceforge.net) - это фреймворк, похожий на Google Test, но который опирается на меньшее количество macos (утверждает, что это функции), и где макросы имеют префикс, чтобы избежать обычной ошибки макроса. Тесты выглядят так:
#include <cpunit> namespace MyAssetTest { using namespace cpunit; CPUNIT_FUNC(MyAssetTest, test_stuff) { int some_value = 42; assert_equals("Wrong value!", 666, some_value); } // Fixtures go as follows: CPUNIT_SET_UP(MyAssetTest) { // Setting up suite here... // And the same goes for tear-down. } }они автоматически регистрируются, так что вам не нужно больше, чем это. Затем он просто компилируется и запускается. Я считаю, что использование этой структуры очень похоже на использование JUnit, для тех, кто должен был потратить некоторое время на Программирование Java. Очень мило!
есть некоторые соответствующие ресурсы модульного тестирования C++ на http://www.progweap.com/resources.html
API Sanity Checker - тестовая платформа для библиотек C / C++:
автоматический генератор базовых модульных тестов для общей библиотеки C и C++. Он способен генерировать разумные (в большинстве, но, к сожалению, не во всех случаях) входные данные для параметров и составлять простые ("здравомыслие" или "мелкое"качество) тестовые случаи для каждой функции в API посредством анализа объявлений в заголовочных файлах.
качество генерируемых тестов позволяет проверьте отсутствие критических ошибок в простых случаях использования. Инструмент способен создавать и выполнять сгенерированные тесты и обнаруживать сбои (segfaults), прерывания, все виды излучаемых сигналов, ненулевой код возврата программы и зависание программы.
уникальные возможности по сравнению с CppUnit, Boost и Google Test:
- автоматическая генерация тестовых данных и входных аргументов (даже для сложных типов данных)
- современный и очень многоразовые специализированных видов вместо светильников и шаблонов
Comments