を呼び出す関数のソースコードにアクセスできる場合std::getline
、最も簡単な解決策は、同じ署名と実装を持つ別の関数のラッパーとして書き直すことですがstd::istream&
、の代わりに使用される追加のパラメーターを使用しますstd::cin
。たとえば、現在次の場合:
my_struct my_func()
{
//...
std::getline(std::cin, in);
//...
}
次に、次のように書き直します。
my_struct my_func(std::istream& is);
inline my_struct my_func()
{
return my_func(std::cin);
}
my_struct my_func(std::istream& is)
{
//...
std::getline(is, in);
//...
}
このように、オブジェクトをにmy_func
渡すことにより、構築された入力シーケンスのコア機能をテストできます。std::istringstream
my_func(std::istream&)
を呼び出す関数のソースコードにアクセスできない場合、std::getline
使用できる1つのトリックは、記述子の標準を置き換えることです。標準のout記述子を置き換え、それに応じて変更するコードについては、この回答を参照してください。