2011-05-19 67 views
5

我正在使用C#,NUnit和SQL Server 2008 R2開發版數據庫運行集成測試。設置我的夾具包括創建一個新的數據庫和加載測試數據,所以我需要dbo權限。使用不同憑據運行NUnit集成測試

但是,我想用較少的權限運行測試。我還有一個AD帳戶,我可以進行身份​​驗證,而我呢可以運行使用模擬一些T-SQL如下所述:http://support.microsoft.com/?scid=306158,如下:

public static bool ExecuteFileAs(string fileName, string connectionString, 
            string user, string domain, string password) 
{ 
    using(new Impersonator(user, domain, password)) 
    { 
     using(var connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 
      return SqlFileExecuter.RunSql(connection, fileName); 
     } 
    } 
} 

當我打這個代碼片斷中斷點,並啓動探查器,我看到另一個連接用我提交給它的用戶名打開,所以模擬真的有效。 不幸的是,我無法在夾具設置結束時運行所有的模擬測試,並在夾具拆卸結束。在設置結束時,我執行以下命令:

 impersonator = new Impersonator("username", "DOMAIN", "pwd"); 

只要第一單元測試開始,我收到此錯誤列出在本次測試使用的DLL文件之一:System.IO.FileLoadException: Could not load file or assembly '...' or one of its dependencies. Access is denied. 我已經理所當然地認爲其他帳戶用我所有的二進制文件完全訪問目錄,這並沒有幫助。

歡迎任何建議。

編輯:我的工作站仍在運行XP。

+1

是否有原因導致您無法使用SQL身份驗證而不是受信任的連接?這隻需要您更改此部分測試的連接字符串。此外,您可以在使用模擬之前將SQL數據加載到內存中,因此您不必訪問sql執行程序的磁盤? – Travis 2011-05-19 18:30:15

+1

特拉維斯,我的生產服務器此時不使用混合模式認證,但我認爲您的建議將起作用。你可以發表你的評論作爲答案,以便我可以接受嗎?謝謝。 – 2011-05-19 19:20:58

+0

您是否使用Windows身份驗證獲得任何解決方案?標記的答案是關於使用SQL – Kiquenet 2016-12-14 15:31:50

回答

3

一種可能的解決方案是不使用Windows身份驗證,而是使用SQL用戶。這只是連接字符串的變化。

此外,如果錯誤與IO權限相關,則可以在模擬用戶之前嘗試執行所有IO。使用http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.aspx而不是SqlFileExecuter可以直接對SQL Server執行T-SQL塊(與ADO.NET不同)。 SMO與上面的做法略有不同...

var s = new Server(connectionString); 
s.ConnectionContext.ExecuteNonQuery(@"CREATE DATABASE test; GO; Use test; ..."); 
+1

現在,我切換到混合模式,它的工作。你的答案被接受。當我有更多的聲望時,我會回覆並且贊成。謝謝! – 2011-05-20 13:50:38

+0

如果使用SQL用戶是不可能的? – Kiquenet 2016-12-14 15:30:14

2

嘗試檢查是否沒有別的東西鎖定相同的文件沒有共享讀取權限。 也啓用綁定錯誤日誌記錄。在win7開始菜單中鍵入融合並以admin身份運行,以便設置不會變灰。然後將「將綁定失敗記錄到磁盤」並指定日誌文件的位置。如果您沒有在註冊表中獲得任何日誌,請檢查HKLM \ Software \ Microsoft \ Fusion \ ForceLog = 1

+1

我確信在XP上綁定錯誤日誌記錄也是可能的。這是.NET功能不是win7的。 – 2011-05-20 08:41:02