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

您可以使用 astd::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 回答