2015-09-25 143 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? 請讓我知道是否有更好的方式來測試這種情況,除了 使用測試框架。謝謝!

相關問題