2

S#arp アーキテクチャ プロジェクトで状態をテストするにはどうすればよいですか?

たとえば、カスタム RoleProvider があります。メソッド provider.AddUsersToRoles(string[], string[]) をテストしたい。

だから私はから始めます:

// Arrange
const string ficticiousRole = "Management";
var userToExpect = UserInstanceFactory.CreateValidTransientUser();
var roleToExpect = RoleInstanceFactory.CreateValidTransientRole();

userRepository.Expect(r => r.GetByUsername(userToExpect.Username))
              .Return(userToExpect);
roleRepository.Expect(r => r.GetByName(ficticiousRole))
              .Return(roleToExpect);

var userNames = new List<string>();
var roleNames = new List<string>();
userNames.Add(userToExpect.Username);
roleNames.Add(ficticiousRole);

次に、ユーザーをロールに追加します。次に、ユーザーがこのロールにいるかどうかを確認します。

// Act
roleProvider.AddUsersToRoles(userNames.ToArray(), roleNames.ToArray());
var isNewUserInRole = roleProvider.IsUserInRole(userToExpect.Username, ficticiousRole);

// Assert
Assert.IsTrue(isNewUserInRole);

問題は、Rhino Mocks を使用していることです。私は Rhino モックの知識が限られていますが、(Ayende Rahien によると) 私の理解では、Rhino モックは状態ではなく操作のテストに使用されます。

だから、メモリ内のSqlLite dbの方が適していると思いますか? S#arp Arch でこれを行う最善の方法は何ですか?

4

2 に答える 2

2

Rhino Mocks ではそれを行うことはできません。これは、データベース呼び出しなどを偽造する単なるモック フレームワークであるためです。基本的にデータベース統合テストであるデータベースへの永続性を実際にテストしたいようです。その場合、SQL Server インスタンスをヒットするのではなく、(可能であれば) SqlLite などのメモリ内データベースを使用することをお勧めします。

あなたがしたいことは、各テストまたはテストクラスの開始時に、データベースが既に存在する場合はそれを破棄し、データベースを再構築し、データベースにシードデータを入力してから、データベースの相互作用をテストすることです。このようにして、各テストを実行する前にデータベースの状態を把握することができます。

私がプロジェクトで行ったことの 1 つは、すべての読み取り専用テストを 1 つのテスト クラスにグループ化して、クラスに対してデータベースの再構築手順を 1 回実行するだけで済み、すべての削除、更新、および挿入テストを他のテスト クラスに移動することでした。すべてのテストの前にデータベースを再構築しました。十分なテストが行​​われると、これにはかなりの時間がかかる可能性があり、CI サーバーに追いやられる可能性があります。

于 2010-11-30T19:16:12.037 に答える
0

コードの残りの部分を見なければ、これに答えるのは難しいでしょう。

于 2010-11-30T18:59:35.243 に答える