Сравнение платформ модульных тестов c++ [закрыто]



Я знаю, что уже есть несколько вопросов относительно рекомендаций для фреймворков модульного тестирования c++, но все ответы не помогли, поскольку они просто рекомендуют одну из фреймворков, но не предоставляют никакой информации о сравнении (функции).



Я думаю, что наиболее интересными фреймворками являются CppUnit, Boost и новая платформа тестирования Google. Кто-нибудь уже проводил сравнение?

569   10  

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

    Ничего не найдено.