2010-11-24 63 views
2

如何在S#arp體系結構項目中測試狀態?在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 Mocks的知識有限,但根據我的理解(根據Ayende Rahien),您使用Rhino Mocks來測試操作,而不是狀態。

所以我想一個內存中的SqlLite數據庫會更合適? S#arp Arch中最好的方法是什麼?

回答

2

你不能用Rhino Mocks來做到這一點,因爲這只是一個模仿框架,可以僞造數據庫調用等。這聽起來像是你真的想要測試數據庫的持久性,這基本上是數據庫集成測試。在這種情況下,您肯定會想要使用內存數據庫,如SqlLite(如果可能),而不是擊中SQL Server實例。

你想要做的是在每個測試或測試類的開始處,如果數據庫已經存在,請拆除數據庫,重建數據庫,用某些種子數據填充數據庫,然後測試數據庫交互。這樣,您可以確保您在每次測試運行之前擁有已知的數據庫狀態。

我在一個項目上做的一件事是將所有隻讀測試分組到一個測試類中,這樣我只需要爲該類執行一次數據庫重建步驟,並將所有刪除,更新和插入測試移動到其他測試類在每次測試之前重建數據庫。給定足夠的測試,這可能會相當耗時,可能希望被降級到CI服務器。

+0

這就是我認爲克里斯。謝謝。我只是覺得在S#中已經有一些內存數據庫已經設置好了。 – autonomatt 2010-12-01 10:49:34

0

沒有看到你的代碼的其餘部分,這將很難回答這個問題。

相關問題