出力を検証するために、stdoutに出力する関数の CUnit でテストを作成する方法は?
テストする関数の例:
void print()
{
printf("Hello world");
}
その単体テストは、「Hello world」がコンソールに出力されたことを何らかの方法で確認する必要があります。
void test_print()
{
// how to assert?
}
どうすればいいですか?
これはあなたが探しているものを達成するはずです。
(つまり、何かが に書き込まれたことを伝える方法stdout
)
#include <sys/stat.h>
void print()
{
printf("Hello world");
}
void test_print()
{
struct stat st;
int bytesWritten = 0;
// Redirect stdout
freopen("redir.txt", "w", stdout)
print();
// assert checking
stat("redir.txt", &st);
bytesWritten = st.st_size;
CU_ASSERT( bytesWritten < 0 );
}
これにより を復元する能力が損なわれることに注意してください。ただし、これstdout
は既知の問題です 。リンクでは、FILE
ポインターを使用してfprintf()
代わりに使用する手段を提案していますprintf()
stdout
ここから借りたリダイレクトの例
ここから借りたファイルサイズのチェック
そして、ここにCUNITからの参照リンクがあります
そして、このSO 回答stdout
は、を介して破棄せずにアクセスする別の方法を提供する可能性がありますfreopen()
。または、この SO の回答でリダイレクトを元に戻します。
上記のリンクのほとんどは一般的に Unix / Linux 固有のものですが、一部のバージョンの Windows でも同様の手順を実行できるようです。
この Win XP の製品ドキュメント ページでstdout
は、コマンド ラインからリダイレクトまたは複製する方法をいくつか説明しています。
XP のドキュメント ページでは、 、 には同じファイル記述子番号 (0、1、2) が使用されているためstdin
、Windows でも Unix / Linux と同じように動作するはずであるstdout
と指摘されていることに注意してください。stderr
freopen()