как модульно протестировать методы, подключенные к БД SQL, в C#

#c# #.net #unit-testing #backend #sqlconnection

Вопрос:

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

 using (var connection = new SqlConnection(connectionString)) {  try  {  connection.Execute(query, sqlParams, commandTimeout: commandTimeout);   return success;  }   //...  

На самом деле я не хочу подключать реальную базу данных. Метод принимает строку подключения в качестве строкового параметра. Как я могу это проверить? Я использую Microsoft.VisualStudio.Тестовые инструменты.Библиотека UnitTesting и библиотека Moq. Язык-C#, .NET

Комментарии:

1. На практике используется несколько методов: (1) абстрагироваться от SqlConnection, (2) абстрагироваться от всего уровня БД или (3) использовать отдельную «базу данных модульного тестирования».

2. Как правило, можно создать вводимую абстракцию, которая обертывает SqlConnection и другие зависимости базы данных. Затем вы можете ввести макет для этих зависимостей и проверить, что макет был вызван. Но в этом случае в этом коде нет никакой реальной логики, которую можно было бы осмысленно протестировать, и реализация абстракции, по сути, просто повторила бы то, что реализовано здесь, не добавив никакой реальной ценности. Можете ли вы уточнить, что здесь тестируется и проверяется?

3. @FranzGleichmann Я хочу проверить, правильно ли метод выполняет запрос и возвращает успех.

4. И почему вы не хотите подключаться к реальной базе данных? Я предполагаю, что под «реальной базой данных» вы подразумеваете базу данных разработки, а не промежуточную или производственную базу данных, верно?

5. Из-за тесной связи с проблемами реализации единственным способом тестирования этого кода было бы подключение к реальной базе данных, что сделало бы этот тест интеграционным. Невозможно «модульно протестировать» этот код изолированно без нежелательного поведения