如何使用cin对代码进行单元测试?

时间:2015-09-25 02:13:24

标签: unit-testing

这个问题的主要原因是我想测试我的运算符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;
}

1 个答案:

答案 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? 如果有更好的方法来测试这样的场景,请告诉我 使用测试框架。谢谢!