单元测试运算符<<在C++中

Tom*_*han 8 c++ unit-testing iostream

我试图找出一种很好的方法来单元测试我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;
};
Run Code Online (Sandbox Code Playgroud)

现在,在我的单元测试方法中,我可以做Date d; cout << d;并验证何时运行测试输出是否正确.但是,我更倾向于以编程方式验证这一点,因此我不必在最终报告中查看测试输出(希望说"0测试失败!").

我对C++很新,所以除了输入和输出之外,我从来没有真正使用过流.

我该如何做到这一点?

Rei*_*ica 22

您可以使用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";
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我花了很长时间在C++中寻找一个不错的单元测试框架,我当时发现的最好的是googletest - 如果你还没有选择框架的话.