Сравнение фреймворков модульного тестирования 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:

  • автоматическая генерация тестовых данных и входных аргументов (даже для сложных типов данных)
  • современный и многоразовый специализированных видов вместо светильников и шаблонов