这个问题的主要原因是我想测试我的运算符overloader而不必在单元测试期间进行用户输入。我怎样才能做到最好?
std :: istream & operator>>( istream &in, Fruit & f )
{
char temp[31];
in >> temp;
f.name = new char[strlen(temp) + 1];
strcpy(f.name, temp);
for( int i = 0; i < CODE_LEN; i++ )
in >> f.code[i];
return in;
}
std :: ostream & operator<<( ostream &out, const Fruit & f )
{
out << setiosflags(ios::left) << setw(MAX_NAME_LEN) << f.name
<< " ";
for( int i = 0; i < CODE_LEN; i++ ) // why is this necessary?
out << f.code[i];
return out;
}
答案 0 :(得分:1)
我发现这样做的一种方法是使用sstream。
void main()
{
Fruit one;
ostringstream out;
istringstream in("Strawberry 4321");
in >> one;
out << one;
if( out.str() == "Strawberry 4321")
cout << "Success";
}
ostringstream和istringstream是迄今为止我发现使用它的最好方法。 关于是否使用stringstream,ostringstream或istringstream,这里有一些争论, 如果你很好奇:What's the difference between istringstream, ostringstream and stringstream? / Why not use stringstream in every case? 如果有更好的方法来测试这样的场景,请告诉我 使用测试框架。谢谢!