0

ロジック レイヤーのテストを作成するときは、使用するデータ アクセス レイヤーをモックします。これは、テスト ケースが相互に依存しないようにするためです。

しかし、ルックアップ テーブルはどうでしょうか。Sizesテーブルのサイズに応じて値を計算するロジックがあるとします。

小 1
中 2
大 3

では、テストで何らかの方法でこのテーブルをモックしますか? 例のために辞書を使用していますか?テーブルが変更されたとき (実際の構成テーブルには数百の値が含まれ、単純なキーと値の形式ではない場合もあります)、コードとテーブルの同期をどのように維持しますか?

または、このルールを曲げて...データベースから直接値を取得しますか? しかし、明日データ ソースを変更したらどうなるでしょうか。または、どういうわけかデータベースにアクセスできませんか? テストケースはどんな条件でも実行することになっていませんか?

最善のアプローチは何ですか?

4

2 に答える 2

1

「幸せな」テストシナリオでデータベースから返された実際のデータを返すだけであっても、ルックアップテーブルをモックします。

ただし、データがデータベースから削除された場合や、データが返されない場合など、エッジ ケースを柔軟にテストできます。

例えば

// Happy tests:
Mock.Setup for GetLookupData() => return FetchRealDataHere();
Assert.AreEqual(3, Mock.Object.CountOfSizes()); // Ensure that Small, Medium and Large
... Do Good scenario unit Tests here

// Test Edge cases / destructive tests
Mock.Setup for GetLookupData() => return new Collection() [{ Small, 1}] [{ Medium 2}] -   // But omit large
... Exception case Unit tests here, e.g. Try and Insert a Large product here.

// Test empty collection
Mock.Setup for GetLookupData() => return new Collection() [Empty]
//  Assert that "NoItemsFoundException" was thrown by your logic here

// Handle empty collection
Mock.Setup for GetLookupData() => return new Collection() [Empty]

編集以下の更新されたコメントの疑似モックセットアップ/ユニットテストコードを更新しました。

于 2012-08-24T11:41:00.167 に答える
0

単体テストの主なアイデアは、ロジックをテストするためにデータ全体を必要としないということです。さまざまなケースを表すデータを探しており、このケースのロジックを証明しています。それで全部です。ただし、単体テストでは、データではなくプログラムロジックをテストしています。

于 2012-08-24T11:36:18.693 に答える