0

答えを探し回っていますが、見つかりませんでした。問題は、私が C で書いたプログラムに対していくつかのテスト ケースを実行する必要があるということです。問題は、一部の関数がユーザー入力を取り込んで、テスト ケースが入力を待機するようにすることです。これは、私が望んでいるものではありません。

これは私のテストケースの1つです:

void test_is_location_free() {
  Storage test_storage = new_storage();
  Item test_item;
  test_storage->inventory[5] = test_item;
  test_storage->inventory[5].loc.shelf = 'A';
  test_storage->inventory[5].loc.place = 1;

  CU_ASSERT(!is_location_free(test_storage, test_item, 'A', 1));
}

is_location_free() が false を返すため、これは機能しますが、関数内には、選択した場所が空くまで、ユーザーに新しい入力を求め続ける別の関数があります。

これは、シェルフに対する新しいユーザー入力を待機するターミナルでどのように表示されるかです。

Suite: HELPER FUNCTIONS
  Test: compare_char() ...passed
  Test: first_empty_position() ...passed
  Test: is_location_free() ...Location not empty, try again!
Shelf:

すべてのユーザー入力を合計で無視する方法はありますか? または、テスト ケースで使用する将来のユーザー入力を定義する方法はありますか?

ありがとう!

4

2 に答える 2

0

コードが標準入力ストリームからユーザー入力を取得していると仮定すると、データをファイルに書き込み、is_location_free 関数を呼び出す前に標準入力を一時的にそのファイルから読み取るように変更できます。

ユーザー入力が代わりに端末 (/dev/tty) から読み取られている場合、同じアイデアが機能すると思いますが、より多くの労力が必要になります。

注: この特定のケースでは、 is_location_free 関数がその名前が示すことだけを実行するように、コードをリファクタリングすることをお勧めします。そうすれば簡単にテストできます。最初の場所が機能しなかった場合にユーザーにプロンプ​​トを表示する動作を追加する 2 番目の関数を記述します。その 2 番目の関数の CUnit テストを行わないことを選択する場合があります。

于 2014-12-18T18:07:34.323 に答える