0

我已将 googletest 集成到我们的 MFC 应用程序中。但是,在编写涉及 COleDateTime 对象的测试时,我遇到了以下警告:

1>gtest/gtest-printers.h(169) : warning C4244: 'initializing' : conversion from 'DATE' to 'const testing::internal::BiggestInt', possible loss of data
1>gtest/gtest-printers.h(168) : while compiling class template member function 'void testing::internal2::TypeWithoutFormatter<T,kTypeKind>::PrintValue(const T &,std::ostream *)'

测试如下:

TEST(FunctionTest, SumDays) 
{
    COleDateTime res = SumDays(COleDateTime(2010,10,31,0,0,0), 1);
    EXPECT_EQ(COleDateTime(2010,11,01,0,0,0), res);
}

问题是我无法添加 << 运算符或 PrintTo 方法作为文档宣布。分配更多测试将涉及日期值,因此我想避免文档引用的内联解决方案。

是否有一个很好的解决方案来控制 COleDateTime 值的打印字符串?

当前输出如下:

<failure message="Value of: res&#x0A;  Actual: 40512&#x0A;Expected: COleDateTime(2010,10,30,0,0,0)&#x0A;Which is: 40481" type=""><![CDATA[.\Code.cpp:6837
Value of: res
  Actual: 40512
Expected: COleDateTime(2010,10,30,0,0,0)
Which is: 40481]]></failure>

注意实际值!

4

1 回答 1

0

我有同样的问题并发现,与Caerbanogs声明相比,实施-Function PrintTo(s) 确实有帮助。一件重要的事情是确保那个“扩展” googletest 行为的类具有与 -Function完全相同的命名空间PrintTo

在这种情况下,这是命名空间ATL

这导致了 和 的以下解决COleDateTime方案COleDateTimeSpan

namespace ATL {

    void PrintTo(const COleDateTime& dtDatum, ::std::ostream* os)
    {
        // I want an additional Format, so I append a human readable notion
        *os << dtDatum.m_dt << " (" << (LPCSTR)dtDatum.Format(_T("%d.%m.%Y %H:%M:%S")) << ")";
    }

    void PrintTo(const COleDateTimeSpan& dsSpanne, ::std::ostream* os)
    {
        *os << dsSpanne.m_span;
    }

}

只需将其放在一个地方,您可以将其包含在所有 googletest-Projects 中(如果您有多个)。

最后它对我有用:-)

于 2014-06-02T12:58:22.910 回答