0

我正在尝试将静态多态性应用于单元测试

template<typename T, typename Output> class HistogramWriter
{
public:
    static void write(const RGBHistogram<T> &hist, Output &output)
    {
       output << "ABCD" << std::endl;
    }
};

现在我正在尝试将输出制作为模拟类以进行单元测试

struct TestMock
{
    std::string data;
};

istream& operator>>(istream &stream, TestMock &mock)
{
    stream >> mock.data;
}

如果我将 T 设置为 int 并将输出设置为 TestMock,则它不起作用。当然,如果我将输出设置为 std::cout,它会起作用。

我正在尝试将字符串复制到 TestMock 的数据中。但我只是不知道该怎么做,编译器抱怨二进制 '<<' no operator found

4

1 回答 1

2

使用HistogramWriter::write输出运算符写入output. 但是,您没有为您的TestMock类提供任何输出运算符,只提供一个输入运算符。

此外,output参数应该是一个可以输出到的,通过为你的类定义一个,你只告诉编译器如何将一个实例输出到一个流,你不定义流本身。operator<<TestMockTestMock

要解决这个问题,您必须使用模板在类中声明输出运算符。像这样的东西:

struct TestMock
{
    std::string data;

    template<class T>
    TestMock& operator<<(const T& value)
    {
        std::ostringstream os;
        os << value;
        data += os.str();
        return *this;
    }
};

上面的代码将使 的实例TestMock表现得像一个流,并且发送给它的所有输出都将附加到data成员变量中。

我建议您阅读更多有关输入和输出运算符的信息,以及如何重载/覆盖它们。

于 2012-09-13T13:27:50.873 回答