標準出力または標準エラー出力に送られるデータをテストで検証したい場合、C++test Stream API を使って検証できます。C++test Stream API は標準の入出力ストリームを使用するように設計されており、ストリームの操作とストリームの内容の検証を実行できます。

このセクションの内容:

C++test Stream API の使用

標準出力または標準エラー出力に送られるデータをテストで検証するには、次の操作を行います。

  1. テスト ケースの実行前にストリームをリダイレクトするには、次のいずれかの関数を使用します。

    CppTest_StreamRedirect* CppTest_RedirectStdOutput()
     
    CppTest_StreamRedirect* CppTest_RedirectStdError()

    CppTest_StreamRedirect* CppTest_RedirectStdOutput() および CppTest_StreamRedirect* CppTest_RedirectStdError() はどちらも特別な内部 C++test 構造へのポインターを返します (エラーの場合は NULL を返します)。「」にあるように、このポインターは後で別のストリーム リダイレクト関数で使用できます。  

  2. ストリームの内容を NULL 終了文字列またはデータ バッファーと比較するには、次の関数を使用します。  

    CppTest_StreamCompare(CppTest_StreamRedirect* redirect, const char* value);
     
    CppTest_StreamNCompare(CppTest_StreamRedirect* redirect, const char* value, unsigned int size);


    どちらの関数も、value がストリーム値に一致した場合は 0 を返し、value がストリーム値より小さい場合は負の整数を返し、value がストリーム値よりも大きい場合は正の整数を返します。  
    CppTest_StreamCompare は strcmp のように動作します。  
    ストリームからのデータ バッファー全体を取得するには、 char* CppTest_StreamReadData(CppTest_StreamRedirect* redirect, unsigned int* len); を使用します。この関数は、ストリームからのデータを持つバッファーへのポインターを返します。バッファーのサイズは len パラメーターに戻されます。バッファーは malloc 関数を使ってアロケートされ、バッファーの解放はユーザーが行う必要があります。  

  3. 入力ストリームの値を設定するには、次の初期化関数を使用します。

    CppTest_StreamRedirect* CppTest_RedirectStdInput(const char* value); 
     
    CppTest_StreamRedirect* CppTest_RedirectNStdInput(const char* value, unsigned int size)


    これらの関数は指定の文字列の値を入力ストリームに設定します。引数を 2 つ指定した後者の呼び出し方の場合、指定文字列中の n 文字が使用されます。  

  4. テスト ケースの最後で C++test の内部ストリームをデフォルト状態に戻すには、次の関数を使用します。

    void CppTest_StreamReset(CppTest_StreamRedirect* redirect);


/* CPPTEST_TEST_CASE_BEGIN foo_test */
void TestSuite::foo_test()
{
  /* Pre-condition initialization */
  CppTest_StreamRedirect* output_stream = CppTest_RedirectStdOutput();
 
  /* Tested function call */   ::foo();
 
  /* Post-condition check */
  /* This assert validates that "Output string" is put by foo() on standard output. */
  CPPTEST_ASSERT(0 == CppTest_StreamCompare(output_stream, "Output string"));
  CppTest_StreamReset(output_stream);
}
/* CPPTEST_TEST_CASE_END foo_test */
 
/* CPPTEST_TEST_CASE_BEGIN bar_test */
void TestSuite_a_0::bar_test()
{
  /* Pre-condition initialization */
  CppTest_StreamRedirect* input_stream = CppTest_RedirectStdInput("Hello World!\n");
 
  /* Tested function call */
  /* bar() reads standard input and returns the string */   
  std::string ret = ::bar();
 
  /* Post-condition check */
  CPPTEST_ASSERT(ret == "Hello World!");   
  CppTest_StreamReset(input_stream);
}
/* CPPTEST_TEST_CASE_END bar_test */
  • No labels