我想写一个单元测试,它声明一个连接字符串是有效的,以便建立一个连接到一个SQL Db。如何测试与Db的连接是否成功建立?
,如果我有:
string connectionString = GetCOnenctionString();
bool conenctionEstablished = false;
如何设置作为检查的DB用“的connectionString”的结果“conenctionEstablished”变量的值提供?
以便我可以在断言中使用它。
我想写一个单元测试,它声明一个连接字符串是有效的,以便建立一个连接到一个SQL Db。如何测试与Db的连接是否成功建立?
,如果我有:
string connectionString = GetCOnenctionString();
bool conenctionEstablished = false;
如何设置作为检查的DB用“的connectionString”的结果“conenctionEstablished”变量的值提供?
以便我可以在断言中使用它。
你可以尝试在一个try/catch然后conenctionEstablished基于连接是否成功设置连接。
因此,连接后不会抛出异常.Open()确保启动成功连接的事实? – pencilCake
不一定。如果您正在使用可靠性更新1(kb2533523)的早于.NET 4的System.Data.dll版本上运行,那么打开一个'SqlConnection'可以为您提供一个池连接,当连接处于池中时该连接断开连接。要真正证明连接是活着的,执行任何'SqlCommand'(比如evpo下面提到的'select 1')。 –
这就是说,因为在你的特定情况下,你只想打开一个连接,连接字符串,所以汇集的连接不是一个因素,所以只需调用'Open()'就足够了。我的其他评论是在一般情况下。 –
有可用的不同状态,看看这个:
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);
}
}
有一个枚举名为Connectionstate 所以你可以断言,如果连接关闭,打开连接等。
Assert.AreEqual(ConnectionState.Connecting, sqlcon.State);
它不会是一个“纯粹的”单元测试,因为你的数据库是真实的,但任何方式。我将使用try catch块,并在打开连接后,使用ExecuteNonQuery()执行“select 1”语句。在try块的结尾将标志设置为true。
我们可以比较检查,如果连接是打开与否,通过使用下面的代码:
using System.Data;
if (conn.State == ConnectionState.Open)
{
return true;
}
else
{
return false;
}
代码单元测试不应该打真正的数据库。 –