Google test PrintTo для std :: set - PullRequest
0 голосов
/ 28 мая 2020

В тесте Google Расширенная документация говорят, что нужно писать PrintTo в том же пространстве имен, которое определяет значение для печати, что отлично, если это ваш собственный класс в вашем собственном пространстве имен, но если он std::set вы не должны добавлять новые члены в пространство имен std.

Итак, как настроить поведение PrintTo для std::set<std::string>? Принтер по умолчанию в тесте Google прекращает печать после определенного количества значений, что бесполезно, если значения, которые различаются, идут после значений, выданных принтером по умолчанию.

#include <set>
#include <string>
#include <gtest/gtest.h>

void PrintTo(const std::set<std::string> &value, std::ostream *str)
{
    *str << "Got here!\n";
}

TEST(MapPrint, custom_printer)
{
    std::set<std::string> one{"foo"};
    std::set<std::string> two{"bar"};

    ASSERT_EQ(one, two); // doesn't print 'Got here!'
}

1 Ответ

0 голосов
/ 28 мая 2020

Работает определение PrintTo в пространстве имен testing::internal. Мне это все еще кажется немного грязным. Предположительно пространство имен internal предназначено для того, чтобы тест Google мог изменять любые детали реализации, которые им нравятся, без учета обратной совместимости. По крайней мере, это не приводит к неопределенному поведению, как при определении PrintTo в пространстве имен std.

...