如何编写c#Delegate到StoredProc的测试?

时间:2015-03-30 08:16:39

标签: c# unit-testing testing stored-procedures delegates

如何为委托方法编写测试? 要么 谨防2个打开的连接,并将'hooks'放在同一个SQL表上....

这不是直接诊断,测试和证明我的当前解决方案不是问题。

我怎么能让TDD或写入的单元/集成测试陷入困境?重新设计建议......

  1. 创建与“TransferWebTransmit”表的连接以进行处理 所有行。
  2. 执行Reader以循环“旧”记录,(ID = 1)
  3. 调用委托方法来处理“旧”记录。 (NB保持最新状态 连接打开,直到所有行都被处理,即调用了委托)。
  4. 委托方法:

    1. 打开一个新连接,执行Stored Proc'TransferWebTransmitUpdate'
    2. 其中 - >更新表'TransferWebTransmit'行(ID = 1),然后执行SELECT(ID = 1)行 ---->光标锁! ----> .Net抛出“System.Data.SqlClient.SqlException(0x801 31904):超时已过期。在完成之前经过了超时时间 操作或服务器没有响应“。 ---->连接已锁定。 ---->必须杀死进程才能恢复
    3. 这是委托方法:

          public int Update(int transferID)
          {
              var obj = new TransferWebMessage();
      
              using (SqlConnection conn = base.GetNewConnection())
              {
                  using (SqlCommand sp_cmd = new SqlCommand())
                  {
                      sp_cmd.CommandText = "TransferWebTransmitUpdate";
      
                      sp_cmd.CommandType = CommandType.StoredProcedure;
                      sp_cmd.Parameters.AddWithValue("TransferID", transferID);
      
                      sp_cmd.Connection = conn;
                      conn.Open();
                      SqlDataReader rdr = sp_cmd.ExecuteReader();
                      int roweffected;
                      while (rdr.Read())
                      {
                          roweffected = rdr.GetInt32(0),
                      }
                  }
              }
              return roweffected;
          }
      

      这是调用行来处理并调用委托:

      public void WatchForDataTransferRequests(_delegateMethod callback)
      {
          using (SqlConnection conn = new SqlConnection(_insol_SubscriberConnectionString))
          {
              // Construct the command to get any new ProductReview rows from the database along with the corresponding product name
              // from the Product table.
              SqlCommand cmd = new SqlCommand(
                  "SELECT [TransferID]" +
                      " FROM [dbo].[TransferWebTransmit]" +
                      " ORDER BY [TransferID] ASC", conn);
      
              cmd.Parameters.Add("@CurrentTransferID", SqlDbType.Int);
              conn.Open();
      
              SqlDataReader rdr = cmd.ExecuteReader();
      
              // Process the rows
              while (rdr.Read())
              {
                  Int32 transferID = (Int32)rdr.GetInt32(0);
                  callback(transferID);
              }
          }
      }
      

0 个答案:

没有答案