【问题标题】:How to test if a connection to a Db is established successfully?如何测试与 Db 的连接是否成功建立?
【发布时间】:2011-09-26 07:56:28
【问题描述】:

我想编写一个单元测试,它断言连接字符串是有效的,以便建立到 SQL Db 的连接。

如果我有:

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

如何设置 'conenctionEstablished' 变量的值作为对提供了 'connectionString' 的 Db 的检查结果?

这样我就可以在 Assert 中使用它。

【问题讨论】:

  • 代码单元测试不应该命中真实的数据库。

标签: c# .net unit-testing ado.net connection


【解决方案1】:

您可以尝试在 try/catch 中连接,然后根据连接是否成功设置 conenctionEstablished。

【讨论】:

  • 那么,连接后不会抛出异常。Open() 确保连接成功启动?
  • 不一定。如果您在具有可靠性更新 1 (kb2533523) 的 .NET 4 之前的 System.Data.dll 版本上运行,则打开 SqlConnection 可以为您提供一个在连接位于池中时断开的池连接。要真正证明连接是活动的,请执行任何SqlCommand(例如下面evpo 建议的select 1)。
  • 也就是说,因为在您的特定情况下,您只想使用该连接字符串打开一个连接,因此池连接不是一个因素,因此只需调用 Open() 就足够了。我的其他评论是一般情况。
【解决方案2】:

这不会是一个“纯粹的”单元测试,因为您的数据库是真实的,但无论如何。我会使用 try catch 块,并在打开连接后使用 ExecuteNonQuery() 执行“select 1”语句。在 try 块的末尾将标志设置为 true。

【讨论】:

    【解决方案3】:

    有不同的状态可用,看看这个:

    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);
        }
    }
    

    【讨论】:

      【解决方案4】:

      有一个名为Connectionstate 的枚举 所以你可以断言连接是否关闭,打开连接等。

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

      【讨论】:

        【解决方案5】:

        我们可以使用以下代码检查连接是否打开:

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

        【讨论】:

          猜你喜欢
          • 2018-03-07
          • 1970-01-01
          • 2019-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-21
          • 2013-05-29
          相关资源
          最近更新 更多