Was ist der beste Weg zu testen privater Methoden mit GoogleTest?

Ich würde gerne testen einige private Methoden, die mit GoogleTest.

class Foo
{
private:
    int bar(...)
}

GoogleTest erlaubt, ein paar Möglichkeiten, dies zu tun.

OPTION 1

Mit FRIEND_TEST:

class Foo
{
private:
    FRIEND_TEST(Foo, barReturnsZero);
    int bar(...);
}

TEST(Foo, barReturnsZero)
{
    Foo foo;
    EXPECT_EQ(foo.bar(...), 0);
}

Bedeutet dies: "gtest/gtest.h" in der Produktion Quelle-Datei.

OPTION 2

Erklären test fixture als ein Freund der Klasse und definieren von Zugriffsmethoden in der Leuchte:

class Foo
{
    friend class FooTest;
private:
    int bar(...);
}

class FooTest : public ::testing::Test
{
protected:
    int bar(...) { foo.bar(...); }
private:
    Foo foo;
}

TEST_F(FooTest, barReturnsZero)
{
    EXPECT_EQ(bar(...), 0);
}

OPTION 3

Den Pimpl-idiom.

Details: Google-Test: Advanced guide.

Gibt es andere Möglichkeiten zum testen von privaten Methoden? Was sind einige vor-und Nachteile jeder option?

Generell sollte man sich nicht unit-testen von privaten Methoden direkt. Stattdessen sollte man mehr schreiben tests für das aufrufen von Methoden, um für die verschiedenen Grenzfälle.
Ich habe aktualisiert die Frage und meine Antwort, damit es nicht so "Meinung". Ich denke, es sollte offen bleiben, da gibt es wahrscheinlich andere Möglichkeiten, dieses problem anzugehen, wurden nicht aufgelistet. Darüber hinaus werden die OP geäußert hat, Sie fand die Antwort hilfreich. Die OP vielleicht finden Sie eine andere Lösung ebenfalls als nützlich.
Es ist oft einfacher und klarer zu testen private (oder protected!) Methoden direkt, aber. Kapselung aus dem Blickwinkel von der Klasse Benutzer kann anders sein als aus dem Blickwinkel der Klasse tester. Unit-tests gemeint sind, zu granular. Wenn der code ist Komplex genug, um getrennt in eine eigene Funktion (private oder nicht), es verdient seinen eigenen unit test.

InformationsquelleAutor Carlos Perez-Lopez | 2017-11-17

Schreibe einen Kommentar