2011-09-26 50 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; 
}