2011-09-26 73 views
2

我想寫一個單元測試,它聲明一個連接字符串是有效的,以便建立一個連接到一個SQL Db。如何測試與Db的連接是否成功建立?

,如果我有:

string connectionString = GetCOnenctionString(); 
bool conenctionEstablished = false; 

如何設置作爲檢查的DB用「的connectionString」的結果「conenctionEstablished」變量的值提供?

以便我可以在斷言中使用它。

+0

代碼單元測試不應該打真正的數據庫。 –

回答

2

你可以嘗試在一個try/catch然後conenctionEstablished基於連接是否成功設置連接。

+0

因此,連接後不會拋出異常.Open()確保啓動成功連接的事實? – pencilCake

+1

不一定。如果您正在使用可靠性更新1(kb2533523)的早於.NET 4的System.Data.dll版本上運行,那麼打開一個'SqlConnection'可以爲您提供一個池連接,當連接處於池中時該連接斷開連接。要真正證明連接是活着的,執行任何'SqlCommand'(比如evpo下面提到的'select 1')。 –

+1

這就是說,因爲在你的特定情況下,你只想打開一個連接,連接字符串,所以彙集的連接不是一個因素,所以只需調用'Open()'就足夠了。我的其他評論是在一般情況下。 –

1

有可用的不同狀態,看看這個:

private static void OpenSqlConnection(string connectionString) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     Console.WriteLine("ServerVersion: {0}", connection.ServerVersion); 
     Console.WriteLine("State: {0}", connection.State); 
    } 
} 
2

有一個枚舉名爲Connectionstate 所以你可以斷言,如果連接關閉,打開連接等。

Assert.AreEqual(ConnectionState.Connecting, sqlcon.State); 
2

它不會是一個「純粹的」單元測試,因爲你的數據庫是真實的,但任何方式。我將使用try catch塊,並在打開連接後,使用ExecuteNonQuery()執行「select 1」語句。在try塊的結尾將標誌設置爲true。

0

我們可以比較檢查,如果連接是打開與否,通過使用下面的代碼:

using System.Data; 

if (conn.State == ConnectionState.Open) 
{ 
    return true; 
} 
else 
{ 
    return false; 
}