1

エンティティを削除するためのテスト ケースを作成しました。テストケースでは、選択クエリで最初のレコードを選択し、その ID を削除メソッドに渡します。削除したいエンティティには、削除を制限するいくつかの子エンティティがある可能性があります。したがって、削除テストケースで最初にエンティティを作成し、次にエンティティを破棄して、子の依存関係の問題に直面しないようにする必要があると思います。削除する前にエンティティを作成するためのコードを作成することをお勧めします。削除方法の前に作成方法をテストするようなものです。提案してください

編集: 私はRailプラットフォームで作業しているので、フィクスチャを使用してデータベースをロードするなどの機能があります(現在使用していないため、同じエラーに直面しています。これを参照してくださいhttps://stackoverflow.com/questions/5288142/rails-fixture-expects-table -name-to-be-prefixed-with-module-name-how-to-disable )。はい、テストケースの実行後に構成を使用してデータベースの状態を復元しています。

4

4 に答える 4

2

単体テストでは、通常、テストを実行する前に何らかのセットアップを行います。

多くのテスト フレームワークは、この種の操作をサポートしています。ただし、通常、外部クエリを介してそれを行うことはありません。たとえば、外部に公開されたcreateクエリを実行する代わりに、特定のプロパティを持つオブジェクトを直接作成できます。

そもそもオブジェクトを直接作成するため、作成クエリ コードをテストしていません (内部でオブジェクトを作成する方法に問題がある場合を除きますが、それが心配な場合はテストすることもできます)。削除コードは次のとおりです。テストされている唯一のもの。

于 2011-03-19T09:28:00.347 に答える
1

テストケースでは、選択クエリで最初のレコードを選択するだけです

これは間違っています。単体テスト中はクエリを実行しないでください。

私が見ることができるテスト:

  1. 既存のものを削除します。
  2. 存在しないエンティティを削除します。
  3. 子を削除します。
  4. 存在しない子を削除します。
于 2011-03-19T09:27:39.843 に答える
1

削除する前にエンティティを作成するためのコードを作成することをお勧めします。削除方法の前に作成方法をテストするようなものです。提案してください

はい、削除をテストするエンティティを作成することをお勧めします。これにより、テストは外部の状態に依存せず、他のテストとは無関係に繰り返し可能になります。

これは作成をテストしませんが、削除をテストするために設定するために作成を使用します。

同じデータに依存する複数のテストがある場合、そのデータを必要とする各テストで呼び出すメソッドに作成を引き出すことができます。ほとんどのテスト フレームワークには、setup各テストの前に実行されるメソッドを指定するためのメカニズムもあり、テスト クラスのすべてのテストにデータが必要な場合は、そこに作成を配置できます。

于 2011-03-19T14:46:17.047 に答える
1

単体テスト フレームワークでテストの依存関係が許可されている場合、つまり、テスト Y がパスした場合にのみテスト X を実行し、Y の戻り値をパラメーターとして X に渡す場合は、問題なく実行できます。PHP では次のようになります。

function setUp() {
    $this->dao = new UserDao(...);
}

function testCreate() {
    $user = $this->dao->create('Bob');
    assertThat($user, notNullValue());
    // more assertions about the new user
    return $user->getId();
}

/**
 * @depends testCreate
 */
function testDelete($id) {
    assertThat($this->dao->delete($id), is(true));
}

testCreate() が失敗した場合、PHPUnit は testDelete() をスキップします。これは、各テストを実行する前に標準のテスト データ セットをセットアップできない場合に有効な回避策です。

于 2011-03-19T09:30:48.427 に答える