如何使用cin进行单元测试

How to unit test with cin?

本文关键字:单元测试 cin 何使用      更新时间:2023-10-16

这个问题的主要原因是我想测试我的操作符重载器,而不必在单元测试期间进行用户输入。我怎样才能最好地做到这一点?

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;
}

我发现的一种方法是使用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的争论,如果你很好奇:istringstream, ostringstream和stringstream之间有什么区别?/为什么不在所有情况下都使用stringstream呢?请让我知道是否有更好的方法来测试这样的场景,显然除此之外使用测试框架。谢谢!