#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. Из-за тесной связи с проблемами реализации единственным способом тестирования этого кода было бы подключение к реальной базе данных, что сделало бы этот тест интеграционным. Невозможно «модульно протестировать» этот код изолированно без нежелательного поведения