Я пытаюсь использовать std::chrono
типы с Google Test.Мой первый подход заключается в определении PrintTo
для nanoseconds
в пространстве имен std::chrono
, но, к сожалению, это неопределенное поведение - добавлять объявления или определения в пространство имен std
или в любое пространство имен, вложенное в std
,Следующий код демонстрирует идею.
#include <gtest/gtest.h>
#include <chrono>
namespace std::chrono {
void PrintTo(nanoseconds ns, std::ostream* os) // UB
{
*os << ns.count() << " nanoseconds ";
}
}
namespace {
struct MyTest : ::testing::Test{
};
TEST_F(MyTest, PrintingTest)
{
using namespace testing;
using namespace std::chrono_literals;
ASSERT_THAT(1ns, Eq(2ns));
}
}
Если определено std::chrono::PrintTo
, оно печатает:
Value of: 1ns
Expected: is equal to 2 nanoseconds
Actual:
Если std::chrono::PrintTo
не определено, оно печатается через байт-принтер по умолчанию:
Value of: 1ns
Expected: is equal to 8-byte object <02-00 00-00 00-00 00-00>
Actual:
Какой идиоматический способ определения принтера для std::chrono
типов с помощью google test?