GoogleTestガイドでは、カスタムタイプを処理する方法を一般的にはteach the frameworkで説明しています。最後に
、次のコードスニペットは、GoogleTestがQStringsで動作することができることのために追加する必要があるのです。
QT_BEGIN_NAMESPACE
inline void PrintTo(const QString &qString, ::std::ostream *os)
{
*os << qUtf8Printable(qString);
}
QT_END_NAMESPACE
このコードは、あなたのテスト・フィクスチャの名前空間であってもよいが、必要ならない(MUST NOT) Qt名前空間(または一般的には、きれいに印刷されるべき型が定義されている名前空間)に存在する必要があります。
結果GoogleTestは今、かなり印刷物のQStrings:
あなたはもちろん、それはQStringのから来ていることをより明確にするために、いくつかの引用符を追加することができます。
*os << "\"" << qUtf8Printable(qString) << "\"";
ソース:Webinar ICS Qt Test-Driven Development Using Google Test and Google Mock Justin Noel著シニアコンサルティングエンジニア
その他のヒント:prをご希望の場合は 'qUtf8Printable'を使用してくださいint文字列中のUnicode文字( 'qPrintable'は" local 8 bit "に変換されますが、特にWindowsではUnicodeがクリーンではないかもしれません)。 'QString'を印刷して印刷できない文字をエスケープする場合は、' QBebte'(おそらく 'QBuffer'に作用し、' QByteArray'をホストしています)に行きます。 – peppe
私はこれを動作させることはできません。面白いのは、2つのPrintTo関数(1つはQString&を取り、もう1つがQStringをとる)を定義すると、コンパイルエラー 'エラーC2668: 'PrintTo'をオーバーロードされた関数へのあいまいな呼び出しが 'void PrintTo(const QString、 std :: ostream *) 'または' void PrintTo(const QString&、std :: ostream *) 'と言っていますが、もし私がちょうどそれを呼び出すようなことがないなら...魔法のソースは何ですか? – gremwell
@gremwell PrintToがアプリケーションの名前空間にないことを確認しましたか?私は別として、ソースが何であるかわからない。最初のフィクスチャが同じCPPファイルで宣言される前にこれらの行を挿入するだけです(QT 5.7および最新のGoogleTest)。 –