10

operator<<C++での実装を単体テストする良い方法を見つけようとしています。演算子を実装するクラスがあり、特定の状態のインスタンスが与えられた場合、出力が希望どおりであることを確認したいと思います。

これは私のコードです(ヘッダーファイル):

class Date {
    virtual int year() const { return 1970; };
    virtual int month() const { return 1; };
    virtual int day() const { return 1; };
    friend  std::ostream &operator<<(std::ostream &os, const Date &d);
};

std::ostream &operator<<(std::ostream &os, const Date &d) {
    os << d.year() << "-" << d.month() << "-" << d.day();
    return os;
};

さて、私の単体テスト方法ではDate d; cout << d;、テストを実行するときに出力が正しいことを確認するだけで済みます。ただし、これをプログラムで検証したいので、最終レポートよりもテスト出力を確認する必要はありません (うまくいけば、「失敗したテストは 0 件です!」と表示されます)。

私は C++ にかなり慣れていないので、入力と出力以外にストリームを実際に使用したことはありません。

どうすればこれを達成できますか?

4

1 に答える 1

25

a を使用しstd::stringstreamて結果を保持し、それを呼び出しstr()て文字列を取得できます。

#include "Date.h"

#include <iostream>
#include <sstream>

int main() {
    Date d;
    std::stringstream out;
    out << d;
    if(out.str() == "1970-1-1") {
        std::cout << "Success";
    } else {
        std::cout << "Fail";
    }
}

注: C++ で適切な単体テスト フレームワークを探すのにかなりの時間を費やしましたが、その時点で見つかった最高のものはgoogletest でした (まだフレームワークを選択していない場合)。

于 2012-10-24T20:06:11.810 に答える