тыжПрограммист
329 / 143 / 44
Регистрация: 21.04.2014
Сообщений: 637
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
.NET 4.x Тестирование программы для работы с базой данных23.05.2016, 02:43. Показов 1649. Ответов 5
Метки нет Все метки)
(
Никогда не занимался юнит тестированием программ. Обычно всегда спасали консоль да куча MessageBox.
Прочитав информацию об тестировании встроенными средствами Visual Studio C# возникло пару вопросов. В интернетах в качестве примеров тестируют обычно простые методы вроде 2+2 и 2>0. У меня программа работает с базой данных. Конкретно с mdb файлом. Структура программы по большей части набор событий да запросов к базе. Вопрос 1. Как производить тестирование методов подобных этому. Да и вообще любых методов касательно баз данных
![]() ![]() ![]()
0
|
|
23.05.2016, 02:43 | |
Ответы с готовыми решениями:
5
Посоветуйте книгу для работы с базой данных Ошибка работы с базой. Установка программы Где можно посмотреть примеры (исходники) работы с базой данных на C#
|
![]() 9798 / 7168 / 1141
Регистрация: 21.01.2016
Сообщений: 27,264
|
|
23.05.2016, 05:45 | 2 |
LonerZzz, модульное тестирование подразумевает, что твоя программа из этих самых модулей и состоит. Судя по примерам кода, что ты представил, твоя программа не модульная. Чтобы сделать твою программу тестопригодной тебе нужно будет разобраться в таких вещах как внедрение зависимостей, разделение обязанностей и прочем.
Почитать об этом ты можешь в таких хороших книгах: * Марк Симан: Внедрение зависимостей в .NET * Рой Ошероув: Искусство автономного тестирования с примерами на С# Причём хочу заметить, что прочтение хотя бы первой книги обязательно для того, чтобы понять как делать тестопригодный код. Ну, или, ты можешь попросить кого-нибудь, чтобы за тебя всё сделали. Это всё потому, что такой вопрос не решается простым советом "сюда допиши это, туда добавь то и готово!". За пять минут не разберёшься.
1
|
тыжПрограммист
329 / 143 / 44
Регистрация: 21.04.2014
Сообщений: 637
|
||||||
23.05.2016, 19:33 [ТС] | 3 | |||||
Пробежался по книге. Начитался по заглушки и прочие ништяки. Всё же вопрос остался. Как правильно тестировать классы типа такого?
0
|
![]() 9798 / 7168 / 1141
Регистрация: 21.01.2016
Сообщений: 27,264
|
|
23.05.2016, 20:05 | 4 |
Вот самое главное. Все твои классы должны взаимодействовать друг с другом только через интерфейсы. И получать свои зависимости классы должны извне (например через конструктор) или от настраиваемой (для целей тестирования) специализированной службы (DI-контейнер, сервис-локатор).
Только тогда ты сможешь тестировать своих классы по одиночке, заменяя их зависимости заглушками и суррогатами имитирующими реальные рабочие условия. Но при всём при этом у тебя в программе будут вещи тебе не подконтрольные, а именно - сторонние технологии (UI, работа с БД, COM, файловая система и т.д.). Их ты, естественно, протестировать не сможешь (да и не надо это). Выход тут простой - изолировать сторонние технологии в отдельные классы и заменять их суррогатами во время тестирования. Судя по приведённому тобой коду, с БД ты так и поступил. Осталось только выделить из класса DB интерфейс (скажем IDB) и заставить код, работающей с базой данных использовать интерфейс, а не сам класс DB.
1
|
тыжПрограммист
329 / 143 / 44
Регистрация: 21.04.2014
Сообщений: 637
|
||||||||||||||||
23.05.2016, 21:19 [ТС] | 5 | |||||||||||||||
Вроде как всё понял. Остался последний вопрос. По поводу заглушек. Например у меня есть метод
Теперь нужно выпилить из кода работу с не тестируемыми штучками. Так как 2 указанных метода вышы ничего не возвращают после их выполнения я пришёл к тому что их удаление ни на что не повлияет(в рамках теста)
Можно конечно вместо void возвращать какое-либо значение после каждого case. Ну и в тест методе проверять на ожидаемый результат. Или же вообще не стоит тестировать данный метод? как лучше поступить?
0
|
![]() 9798 / 7168 / 1141
Регистрация: 21.01.2016
Сообщений: 27,264
|
|
24.05.2016, 07:38 | 6 |
![]() Решение![]() Всё не так! "Выпилить код с нетестируемыми штучками" - значит видоизменить метод таким образом, чтобы логика его работы не нарушалась. А ты же просто всё из метода повыкидывал. И новый класс создавать не нужно. Просто на существующем выполняешь команду "Refactor -> Extract Interface" и получаешь интерфейс твоего класса. Настоятельно рекомендую почитать литературу, что я привёл выше. Если время у тебя ещё есть, конечно ![]()
1
|
24.05.2016, 07:38 | |
Помогаю со студенческими работами здесь
6
Класс для управления базой данных Класс для работы с базой данных Программа для работы с базой данных Хостинг для работы с базой данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |