2013-09-13 4 views
2

Я работаю над модульными тестами и я сделал тест, который проверяет следующий метод:команда SqlConnection не проливает Exception на удалениях

общественного недействительный DeleteTransport (интермедиат 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(); 
     } 
    } 

В Unit Test, я даю не существующий id в качестве параметра, но метод не генерирует исключение SqlException.

Как выбросить исключение, если идентификатор не существует?

Я использую:

  • Visual Studio 2012
  • TFS
  • Sql Server 2008
+0

Там не является исключением, так как нет неисправна ситуация. После выполнения инструкции в Transports с запрошенным идентификатором нет записи. – Anton

+2

Почему вы используете DataSet и SqlDataAdapter для этого в первую очередь? Почему бы просто не вызвать ExecuteNonQuery и посмотреть, какой результат? –

ответ

2

Это не сгенерирует исключение, было бы просто обновить 0 строк.

Вы можете проверить, сколько строк было затронуто с помощью ExecuteNonQuery(), и если они равны 0, вы можете выбросить исключение (которое было бы дорогостоящим), но достигло бы того, чего вы ожидаете.

Вы также можете переписать модульный тест на Утверждают, что ряды пострадавших больше 0.

+2

Или он мог проверить перед инструкциями удаления, если идентификатор существует, а затем создать исключение, если нет. (Не знаю, дороже ли это предложение). –

+2

благодарит за полезные предложения! _ExecuteNonQuery_ работает намного лучше! – dpwulp94

Смежные вопросы