2010-11-24 19 views
2

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

たとえば、私はカスタムRoleProviderを持っています。私はメソッドprovider.AddUsersToRoles(文字列[]、文字列[])をテストしたい。

だから私はで始まる:

// 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 Mocksの知識は限られていますが、(Ayende Rahienによると)Rhino Mockを使用して、状態をテストするのではなく、動作をテストします。

私はメモリ内のSqlLiteデータベースがより適していると思いますか? S#arp Archでこれを行う最善の方法は何ですか?

答えて

2

これはRhino Mockではできません。これは単にデータベースコールなどのようなものを偽造する模擬フレームワークなので、実際はデータベースの永続性を基本的にテストしたいと思うようです。その場合は、SQL Serverインスタンスにヒットするのではなく、SqlLiteなどのメモリ内データベース(可能な場合)を使用することが最も確実です。

各テストまたはテストクラスの開始時に、データベースがすでに存在する場合はそれを破棄し、データベースを再構築し、シードデータをデータベースに取り込み、データベースの相互作用をテストします。このようにして、各テストを実行する前にデータベースの状態を確認できます。

私がプロジェクトで行ったことの1つは、すべての読み取り専用テストを1つのテストクラスにグループ化したため、データベースの再構築ステップをクラスに対して一度行うだけで、すべての削除、更新、各テストの前にデータベースを再構築する他のテストクラス。十分なテストがあれば、これは非常に時間がかかることがあり、CIサーバーに委任されることがあります。

+0

それは私がクリスと思ったものです。ありがとう。私はちょうどそこにいくつかのメモリ内のデータベースがS#内にすでにセットアップされていると思っていました。 – autonomatt

+0

Sharpでデータベース操作をテストする方法を説明するwikiエントリが見つかりました。基本的に、テストクラスはRepositoryTestBaseから継承します。詳細はこちらhttp://wiki.sharparchitecture.net/%28S%28qmzcoqrmp2gbmr45nfjqb1vo%29%29/Default.aspx?Page=Tutorial5RetriveResultsViaDao&AspxAutoDetectCookieSupport=1 – autonomatt

0

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

関連する問題