Сравнение фреймворков модульного тестирования c++ [закрыто]
Я знаю, что уже есть несколько вопросов, касающихся рекомендаций для C++ unit test Framework, но все ответы не помогли, поскольку они просто рекомендуют одну из фреймворков, но не предоставляют никакой информации о сравнении (функции).
Я думаю, что наиболее интересными фреймворками являются CppUnit, Boost и новая платформа тестирования Google. Кто-нибудь уже провел сравнение?
10 ответов
посмотреть здесь для некоторого обсуждения.
они рекомендуют статей: изучение структуры модульного тестирования c++ джунгли, Ноэль Ллопис. И последнее:C++ Test Unit Framework
Я еще не нашел статью, которая сравнивает googletest с другими фреймворками.
новый игрок Google Test (также известный как Google C++ Тестирование 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.
// 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++: Учебник По Тестированию 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 - тестовая платформа для библиотек C / C++:
автоматический генератор базовых модульных тестов для общей библиотеки C и C++. Он способен генерировать разумные (в большинстве, но, к сожалению, не во всех случаях) входные данные для параметров и составлять простые ("здравомыслие" или "мелкое"качество) тестовые случаи для каждой функции в API посредством анализа объявлений в заголовочных файлах.
качество сгенерированных тестов позволяет проверьте отсутствие критических ошибок в простых случаях использования. Инструмент способен создавать и выполнять сгенерированные тесты и обнаруживать сбои (segfaults), прерывания, все виды излучаемых сигналов, ненулевой код возврата программы и зависание программы.
уникальные функции по сравнению с CppUnit, Boost и Google Test:
- автоматическая генерация тестовых данных и входных аргументов (даже для сложных типов данных)
- современный и многоразовый специализированных видов вместо светильников и шаблонов