Ответ 1
См. этот вопрос для обсуждения.
Они рекомендуют статьи: Изучение С++ Unit Testing Framework Jungle, Noel Llopis. И последнее: С++ Test Unit Frameworks
Я еще не нашел статью, которая сравнивает googletest с другими фреймворками.
Я знаю, что уже есть несколько вопросов, касающихся рекомендаций для модульных тестов C++, но все ответы не помогли, так как они просто рекомендуют одну из структур, но не предоставляют никакой информации о сравнении (функции).
Я думаю, что наиболее интересные фреймворки - это CppUnit, Boost и новый фреймворк Google для тестирования. Кто-нибудь еще сравнивал?
См. этот вопрос для обсуждения.
Они рекомендуют статьи: Изучение С++ Unit Testing Framework Jungle, Noel Llopis. И последнее: С++ Test Unit Frameworks
Я еще не нашел статью, которая сравнивает googletest с другими фреймворками.
Новый игрок Google Test (также известный как Google С++ 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;
SCOPED_TRACE
для подпрограммных цикловЯ только что нажал свою собственную фреймворк, CATCH. Он все еще находится в разработке, но я считаю, что он уже превосходит большинство других структур. У разных людей разные критерии, но я пытался охватить большинство из них без слишком большого количества компромиссов. Взгляните на мою связанную запись в блоге для дегустатора. Мои пять лучших функций:
Он также имеет привязки Objective-C. Проект размещен на Github
Boost Test Library - очень хороший выбор, особенно если вы уже используете 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 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%
}
Он поддерживает:
PS: Я написал статью об этом, которая может помочь вам начать работу: С++ Unit Testing Framework: Учебное пособие по повышению эффективности
В Википедии есть всеобъемлющий список модулей модульного тестирования, с таблицами, которые идентифицируют поддерживаемые функции или нет.
Недавно я выпустил xUnit ++, в частности, в качестве альтернативы 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));
}
Основные возможности:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
Log.Debug << "Starting test"; Log.Warn << "Here 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. Очень приятно!
Есть некоторые релевантные ресурсы тестирования модулей С++ в http://www.progweap.com/resources.html
API Sanity Checker - тестовая среда для библиотек C/С++:
Автоматический генератор базовых модульных тестов для общей библиотеки C/С++. Он способен генерировать разумные (в большинстве, но, к сожалению, не во всех случаях) входные данные для параметров, и составлять простые ( "здравомыслящие" или "мелкие" -качества) тестовые примеры для каждой функции в API посредством анализа объявлений в заголовке файлы.
Качество сгенерированных тестов позволяет проверить отсутствие критических ошибок в простых случаях использования. Инструмент способен создавать и выполнять сгенерированные тесты и обнаруживать сбои (segfaults), прерывания, все виды излучаемых сигналов, ненулевой код возврата программы и зависание программы.
Уникальные возможности по сравнению с CppUnit, Boost и Google Test: