Porównanie frameworków testów jednostkowych c++ [zamknięte]

Wiem, że jest już kilka pytań dotyczących rekomendacji dla frameworków testów jednostkowych c++, ale wszystkie odpowiedzi nie pomogły, ponieważ po prostu polecają jeden z frameworków, ale nie dostarczają żadnych informacji o porównaniu (funkcji).

Myślę, że najciekawsze frameworki to CppUnit, Boost i Nowy Framework Google testing. Czy ktoś zrobił już jakieś porównanie?

Author: housemaister, 2008-10-28

10 answers

Zobacz to pytanie do dyskusji.

Polecają artykuły: eksploracja C++ Unit Testing Framework Jungle, by Noel Llopis. I nowsze: C++ Test Unit Framework

Nie znalazłem jeszcze artykułu, który porównuje googletest do innych frameworków.

 80
Author: Sam Saffron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:31

Nowym graczem jest Google Test (znany również jako Google C++ Testing Framework), który jest całkiem ładny.

#include <gtest/gtest.h>

TEST(MyTestSuitName, MyTestCaseName) {
    int actual = 1;
    EXPECT_GT(actual, 0);
    EXPECT_EQ(1, actual) << "Should be equal to one";
}

Główne cechy:

  • Przenośne
  • twierdzenia śmiertelne i twierdzenia nie śmiertelne
  • Easy assertions informative messages : ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • Google Test automatycznie wykrywa twoje testy i nie wymaga ich wyliczania w celu ich uruchomienia
  • Ułatw sobie rozszerz Twój Słownik twierdzeń
  • testy śmierci (patrz Przewodnik zaawansowany)
  • SCOPED_TRACE dla pętli podprogramu
  • możesz zdecydować które testy uruchomić
  • XML generowanie raportu z badań
  • Oprawy / Mock / Szablony ...
 103
Author: Wernight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-25 12:25:03

Właśnie wypchnąłem swój własny framework, CATCH . Jest nadal w fazie rozwoju, ale wierzę, że już przewyższa większość innych frameworków. Różni ludzie mają różne kryteria, ale starałem się pokryć większość terenu bez zbyt wielu kompromisów. Spójrz na mój połączony wpis na blogu dla degustatora. Moje pięć najlepszych funkcji to:

  • tylko nagłówek
  • Automatyczna rejestracja testów opartych na funkcjach i metodach
  • rozkłada standardowe wyrażenia C++ na LHS i RHS (tak nie potrzebujesz całej rodziny makr assert).
  • Wsparcie dla zagnieżdżonych sekcji w oprawie opartej na Funkcji
  • testy nazw z użyciem języka naturalnego-generowane są nazwy funkcji / metod

Posiada również wiązania Objective-C. Projekt jest hostowany na Github

 93
Author: philsquared,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-11 23:08:05

Biblioteka testów Boost jest to bardzo dobry wybór, zwłaszcza jeśli już używasz 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%
}

Obsługuje:

  • automatyczna lub Ręczna rejestracja testów
  • wiele twierdzeń
  • automatyczne porównywanie zbiorów
  • różne formaty wyjściowe (w tym XML)
  • Oprawy / Szablony ...

PS: napisałem o tym artykuł, który może pomóc Ci zacząć: C++ Unit Testing Framework: A Boost Test Tutorial

 47
Author: Wernight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-25 12:24:23

Wikipedia posiada obszerną listę frameworków testowania jednostkowego, z tabelami identyfikującymi funkcje obsługiwane lub nie.

 20
Author: John Deters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-26 20:50:44

Niedawno wydałem xUnit++, w szczególności jako alternatywę dla Google Test i biblioteki testów Boost (zobacz porównania ). Jeśli znasz xUnit.Net, jesteś gotowy na 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));
}

Główne cechy:

  • niesamowicie szybko: testy przebiegają równocześnie.
  • Przenośne
  • Automatyczna Rejestracja testu
  • wiele typów twierdzeń (Boost nie ma nic na xUnit++)
  • porównuje zbiory natywnie.
  • twierdzenia wchodzą w trzy poziomy:
    • fatal errors
    • błędy inne niż fatalne
    • Ostrzeżenia
  • Easy assert loging: Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • Test logowanie: Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • oprawy
  • oparte na Danych testy (teorie)
  • Wybierz testy do uruchomienia na podstawie:
    • dopasowanie atrybutów
    • Nazwa substring matchin
    • Zestawy Testowe
 12
Author: moswald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-04 20:24:28

CppUTest - bardzo ładny, lekki framework z przykładowymi bibliotekami. Warto przyjrzeć się bliżej.

 3
Author: ratkok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 18:40:12

CPUnit (http://cpunit.sourceforge.net ) jest frameworkiem podobnym do Google Test, ale polegającym na mniejszej liczbie macOS (asserts are functions) i w którym makra są poprzedzone prefiksem, aby uniknąć zwykłej pułapki makr. Testy wyglądają następująco:

#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.
    }

}

Rejestrują się automatycznie, więc nie potrzebujesz więcej niż to. Następnie jest po prostu skompilować i uruchomić. Używanie tego frameworka jest bardzo podobne do używania JUnit, dla tych, którzy musieli poświęcić trochę czasu na programowanie Javy. Bardzo ładnie!

 3
Author: Roger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-05 14:41:05

Istnieją odpowiednie zasoby do testowania jednostek C++ w http://www.progweap.com/resources.html

 2
Author: Dave Young,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-16 14:56:51

API Sanity Checker - Framework testowy dla bibliotek C / C++:

Automatyczny generator podstawowych testów jednostkowych dla współdzielonej biblioteki C / C++. Jest w stanie wygenerować rozsądne (w większości, ale niestety nie we wszystkich przypadkach) dane wejściowe dla parametrów i tworzyć proste ("sanity" lub "shallow"-quality) przypadki testowe dla każdej funkcji w API poprzez analizę deklaracji w plikach nagłówkowych.

Jakość generowanych testów pozwala sprawdzić brak krytycznych błędy w prostych przypadkach użycia. Narzędzie jest w stanie budować i wykonywać generowane testy i wykrywać awarie (segfaults), przerwania, wszelkiego rodzaju emitowane sygnały, niezerowy kod powrotu programu i zawieszanie programu.

Unikalne funkcje w porównaniu z CppUnit, Boost i Google Test:

  • Automatyczne generowanie danych testowych i argumentów wejściowych (nawet dla złożonych typów danych)
  • nowoczesne i wysoce wielokrotnego użytku specjalistyczne typy zamiast armatury i szablony
 2
Author: linuxbuild,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-17 19:54:40