C ++の2つのOstreamオブジェクトを等式について比較するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4109441

質問

クラスの左シフト演算子を過負荷にし、出力は正常に機能します。たとえば、cout << objと書かれたラインがある場合。コンマによって分離されたフィールドを出力します。

 ostream& operator<<(ostream& output, const MyClass& obj)
 {
     output << obj.field1 << ", " << obj.field2;
     return output;
 }

この操作のテストケースを書きたいと思いますが、返された結果をCXXTESTで期待される結果と比較する方法がわかりません。私は次のことを試しましたが、それは機能しませんでした:

 TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj);

別のCXXTEST操作を使用するか、TS_ASSERT_EQUALSのパラメーター通過メカニズムを変更することになっていますか?

次の行を出力すると、同じ結果が得られることに注意してください。

 cout << obj;
 cout << "1, 50.0";

注:TS_ASSERT_EQUALSが失敗するため、プログラムをコンパイルしようとすると、コンパイラエラーがたくさんあります。

役に立ちましたか?

解決

コンパイルしたとしても、基本的に比較しています cout それ自体が...

2つの異なるものに書き込んでみてください std::stringstreams、文字列値を抽出し、これらを比較します。

OstReamフラグをテストする必要がある場合は、比較関数を定義して使用します TS_ASSERT_RELATION.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top