2015-09-25 121 views
1

这个问题的主要原因是,我想测试我的运营商overloader,而不必在我的单元测试期间做用户输入。我如何最好地实现这一目标?如何用cin单元测试代码?

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

我找到的一种方法是使用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? 请让我知道是否有更好的方式来测试这种情况,除了 使用测试框架。谢谢!

相关问题