自動テストプログラムを作成しようとしているCでプログラムを書いています。I/O チャネル (stdin、stdout、および stderr) が「ブラック ボックス テスト モジュール」にリダイレクトされるプロセスが生成されます。2 つの数の乗算を含む単純なプログラムを想定してみましょう。この場合、テストするプログラムは次のようになります。
#include<stdio.h>
int main()
{
int a, b, numTc, i = 0; //numTc being the number of test cases
scanf("%d",&numTc);
for(;i < numTc; i++)
{
scanf("%d%d",&a,&b); //Facing issue here
printf("%d\n",a*b);
}
}
ブラック ボックス テスト モジュールは、最初にこのプログラムの I/O チャネルをパイプにリダイレクトし、次にwrite()
システム コールを使用して、最初にテスト ケースの数を書き込み、その後にテスト ケース自体を書き込みます。
私が直面している問題は次のとおりです。上記のように、2 番目の scanf でプロセスがハングします。入力バッファ全体を構築し、「\n」を追加した後にパイプに書き込むと、問題なく動作します。
ただ、機能は一つ一つ実現していきたいです。
ブラック ボックス モジュールのロジックは次のとおりです。
- データベースから合計テスト ケースを読み取る
- すべてのテスト ケースがスペースで区切られ、改行で終わる入力バッファーを作成します。
- このバッファを外部 (テスト対象プロセス) プロセスの stdin に書き込みます。
- テストされたプロセスからの出力を待ちます。
上記は正常に動作しています。ただし、ブラック ボックス モジュールは、テスト ケースを 1 つずつ記述できる必要があります。