Сравнение фреймворков модульного тестирования C++ [закрыто]
-
04-07-2019 - |
Вопрос
Я знаю, что уже есть несколько вопросов относительно рекомендаций по платформам модульного тестирования C++, но все ответы не помогли, поскольку они просто рекомендуют одну из платформ, но не предоставляют никакой информации о сравнении (функций).
Я думаю, что наиболее интересными фреймворками являются CppUnit, Boost и новый фреймворк тестирования Google.Кто-нибудь уже проводил сравнение?
Решение
Просмотреть этот вопрос для некоторого обсуждения.
Они рекомендуют статьи: Изучение джунглей инфраструктуры модульного тестирования C ++ , Ноэль Льопис. И более свежая версия: рамки тестового модуля C ++
Я еще не нашел статью, которая сравнивает googletest с другими фреймворками.
Другие советы
Новый игрок Google тест (также известен как Платформа тестирования Google C++), что довольно приятно.
#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 тест автоматически обнаруживает ваши тесты и не требует их перечисления для их запуска
- Сделать это легко продлевать ваш словарь утверждений
- Смертельные испытания (см. расширенное руководство)
SCOPED_TRACE
для циклов подпрограмм- Вы можете решить какие тесты запускать
- XML формирование отчета об испытаниях
- Светильники / Насмехаться / Шаблоны...
Я только что выдвинул свою собственную структуру, ЛОВИТЬ, там.Он все еще находится в стадии разработки, но я считаю, что он уже превосходит большинство других фреймворков.У разных людей разные критерии, но я постарался охватить большую часть вопросов, не прибегая к слишком большим компромиссам.Взгляните на мою связанную запись в блоге для дегустации.Мои пять главных особенностей:
- Только заголовок
- Автоматическая регистрация тестов на основе функций и методов
- Разлагает стандартные выражения C++ на левую и правую части (поэтому вам не нужно целое семейство макросов утверждения).
- Поддержка вложенных разделов внутри функционального прибора.
- Тесты имен с использованием естественного языка — генерируются имена функций/методов.
Он также имеет привязки Objective-C.Проект размещен на Гитхаб
Библиотека тестов ускорения — очень хороший выбор, особенно если вы уже используете 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)
- Светильники / Шаблоны...
ПС:Я написал об этом статью, которая может помочь вам начать работу: Платформа модульного тестирования C++:Учебное пособие по тестированию Boost
В Википедии имеется полный список структур модульного тестирования с таблицами, в которых указаны поддерживаемые функции или нет. . р>
Я недавно выпустил хЮнит++, в частности в качестве альтернативы Google Test и Boost Test Library (см. сравнения).Если вы знакомы с 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));
}
Основные особенности:
- Невероятно быстро:тесты выполняются одновременно.
- Портативный
- Автоматический тестовая регистрация
- Много типы утверждений (Boost ничего не имеет в xUnit++)
- Сравнивает коллекции изначально.
- Утверждения приходят три уровни:
- фатальные ошибки
- нефатальные ошибки
- предупреждения
- Легкий утверждать Ведение журнала:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
- Тест Ведение журнала:
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
- Светильники
- Управляемый данными тесты (Теории)
- Выберите, какие тесты запускать на основе:
- Сопоставление атрибутов
- Соответствие подстроки имени
- Тестовые наборы
CppUTest - очень удобный и легкий фреймворк с фиктивными библиотеками. Стоит присмотреться.
CPUnit ( http://cpunit.sourceforge.net ) - это среда, похожая на Google Test, но который опирается на меньшее количество макросов (утверждают, что это функции), и где макросы имеют префикс, чтобы избежать обычной ловушки макросов. Тесты выглядят так:
#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:
- Автоматическое создание тестовых данных и входных аргументов (даже для сложных типов данных)
- Современный и многоразовый специализированные типы вместо приспособлений и шаблонов