0

MFC アプリケーションに googletest を統合しました。ただし、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のステートメントとは対照的に、 PrintTo-Function(s) を実装すると実際に役立つことがわかりました。重要なことの 1 つは、そのクラスのクラスが 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 に答える