Сравнение фреймворков модульного тестирования C++ [закрыто]

StackOverflow https://stackoverflow.com/questions/242926

Вопрос

Я знаю, что уже есть несколько вопросов относительно рекомендаций по платформам модульного тестирования 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:

  • Автоматическое создание тестовых данных и входных аргументов (даже для сложных типов данных)
  • Современный и многоразовый специализированные типы вместо приспособлений и шаблонов
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top