4

私はテスト駆動開発に不慣れで、初めてそれを単純なプロジェクトで使用しようとしています。

クラスがあり、このクラスのオブジェクトの作成、挿入、および削除をテストする必要があります。3つの別々のテスト関数を作成する場合、他の関数で初期化コードを複製する必要があります。一方、すべてのテストを1つのテスト関数に入れると、関数ごとに1つのテストと矛盾します。私は何をすべきか?

ここに状況があります:

tst_create()
{
   createHead(head);
   createBody(body);
   createFoot(foot);
}

tst_insert()
{
   createHead(head);
   createBody(body);
   createFoot(foot);

   obj_id=insert(obj); //Also I need to delete obj_id somehow in order to preserve old state
}

tst_delete()
{
   createHead(head);
   createBody(body);
   createFoot(foot);

   obj_id=insert(obj); 

   delete(obj_id);
}

vs

tstCreateInsertDelete()
{
   createHead(head);
   createBody(body);
   createFoot(foot);

   obj_id=insert(obj);

   delete(obj_id);
}
4

2 に答える 2

6

「機能ごとに1つのテスト」ではなく、「機能ごとの動作の1つの側面」と考えてみてください。

オブジェクトを挿入すると何が得られますか?オブジェクトを削除するのはどうですか?なぜこれらは価値があるのですか?どうやってそれらをやったと言うことができますか?コードがどのように使用されるか、そしてなぜその振る舞いが価値があるのか​​についての例を書いてください。それがあなたのテストになります。

関心のある動作を理解したら、テストが読みやすくなる場合にのみ、重複を抽出します。TDDはテストだけではありません。また、ドキュメントを提供し、コードの各要素の責任とそのコードの設計について考えるのに役立ちます。テストはおそらく書かれているよりもはるかに多く読まれるので、読みやすさを最優先する必要があります。

必要に応じて、関心のあるすべての動作を1つのメソッドに入れ、読み取り可能であることを確認してください。必要に応じてコメントを追加できます。

于 2011-01-31T15:30:47.400 に答える
4

テストで重複を除外します。

テストフレームワークによっては、各テストの実行前に呼び出されるセットアップメソッドと、各テストの後に呼び出されるティアダウンメソッドを定義するためのサポートがある場合があります。

とにかく、共通のものを抽出して、単一の共有セットアップへの呼び出しを繰り返すだけで済むようにすることができます。

使用している言語とテストフレームワークを教えていただければ、より具体的なアドバイスを提供できる可能性があります。

于 2011-01-31T14:19:50.883 に答える