【问题标题】:SqlConnection command throws no Exception on deleteSqlConnection 命令在删除时不抛出异常
【发布时间】:2013-09-13 13:04:20
【问题描述】:

我正在做单元测试,我做了一个测试来测试以下方法:

public void DeleteTransport(int id)

   {
       SqlConnection sqlConnection = new SqlConnection(SQL_CONN);
       try
       {
           sqlConnection.Open();
           SqlCommand dbCommand = sqlConnection.CreateCommand();
           dbCommand.CommandText = string.Format("DELETE FROM dbo.Transports WHERE ID={0}", id);
           SqlDataAdapter dap = new SqlDataAdapter(dbCommand);

           var ds = new DataSet("Transports");
           dap.Fill(ds);
       }
       finally
       {
           sqlConnection.Close();
       }
   }

在单元测试中,我给出了一个不存在的 id 作为参数,但该方法没有抛出 SqlException。

id不存在如何抛出异常?

我正在使用:

  • Visual Studio 2012
  • TFS
  • Sql Server 2008

【问题讨论】:

  • 没有异常情况,也不例外。执行该语句后,Transports 中没有具有请求 ID 的记录。
  • 你为什么首先使用 DataSet 和 SqlDataAdapter?为什么不直接调用 ExecuteNonQuery 看看结果如何?

标签: c# sql sql-server database unit-testing


【解决方案1】:

这不会引发异常,它只会更新 0 行。

您可以检查使用ExecuteNonQuery() 影响了多少行,如果它们等于0,您可以抛出异常(这在计算上会很昂贵),但会达到您的预期。

您也可以将单元测试重写为断言受影响的行数大于 0。

【讨论】:

  • 或者他可以在删除指令之前检查id是否存在,如果不存在则创建异常。(不知道它是否比你的建议更昂贵)。
  • 感谢您的有用建议! ExecuteNonQuery 确实效果更好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 2018-03-05
  • 2016-04-07
  • 2013-05-24
  • 1970-01-01
  • 2017-01-19
相关资源
最近更新 更多