Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как я должен протестировать метод, который заполняет список из DataReader?
Поэтому я работаю над некоторым устаревшим кодом, который тяжело переносится на ручные операции с базой данных. Я стараюсь поддерживать здесь некое подобие качества,поэтому стараюсь делать все возможное.
Код, над которым я работаю, должен быть заполнен, скажем, a List<Foo> из A DataReader, который возвращает все поля, необходимые для функционирования Foo. Однако если я хочу проверить, что код фактически возвращает один элемент списка на одну строку базы данных, я пишу тестовый код, который выглядит примерно так:
Expect.Call(reader.Read()).Return(true);
Expect.Call(reader["foo_id"]).Return((long) 1);
// ....
Expect.Call(reader.Read()).Return(true);
Expect.Call(reader["foo_id"]).Return((long) 2);
// ....
Expect.Call(reader.Read()).Return(false);
Что тоже довольно утомительно и довольно легко нарушается.
Как я должен подходить к этому вопросу, чтобы результат не был огромным беспорядком хрупких тестов?
Кстати, в настоящее время я использую Rhino.Mocks для этого, но я могу изменить его, если результат будет достаточно убедительным. Просто пока альтернативой не является TypeMock, потому что их EULA было немного слишком страшно на мой вкус, когда я последний раз проверял.
Edit: я также в настоящее время ограничен C# 2.
Чтобы сделать это менее утомительным, вам нужно будет инкапсулировать/рефакторировать сопоставление между DataReader и объектом, который вы держите в списке. Существует довольно много шагов, чтобы инкапсулировать эту логику. Если это та дорога, по которой вы хотите ехать, я могу отправить вам почтовый индекс. Я просто не уверен, насколько практично было бы разместить код здесь, на StackOverflow, но я могу дать ему шанс сохранить его кратким и по существу. В противном случае вы застряли с утомительной задачей повторения каждого ожидания на индексном методе доступа для читателя. Процесс инкапсуляции также избавит вас от строк и сделает их более многоразовыми с помощью ваших тестов.
Кроме того, я не уверен на данный момент, насколько вы хотите сделать существующий код более тестируемым. Поскольку это устаревший код, который не был построен с учетом тестирования.
Я думал о публикации какой-то код и тут я вспомнил, о чем ДЖП Будху, но .NET курс. У него есть образец проекта , которым он делится и который был создан во время одного из его занятий. Проект размещен на Google Code , и это хороший ресурс. Я уверен, что у него есть несколько хороших советов для вас, чтобы использовать и дать вам идеи о том, как рефакторировать отображение. Весь проект был построен с помощью TDD.
Вы можете поместить экземпляры Foo в список и сравнить объекты с тем, что Вы читаете:
var arrFoos = new Foos[]{...}; // what you expect
var expectedFoos = new List<Foo>(arrFoos); // make a list from the hardcoded array of expected Foos
var readerResult = ReadEntireList(reader); // read everything from reader and put in List<Foo>
Expect.ContainSameFoos(expectedFoos, readerResult); // compare the two lists
Коко,
Тут есть пара неправильных вещей. Во-первых, делая это таким образом, я должен сначала сконструировать Foo, а затем передать их значения в mock reader, который ничего не делает для уменьшения объема кода, который я пишу. Во-вторых, если значения проходят через считыватель, то Foos не будет тем же самым Foos (ссылочное равенство). Они могут быть равны, но даже это предполагает слишком много из класса Foo, к которому я не осмеливаюсь прикоснуться в данный момент.
Просто чтобы уточнить, вы хотите иметь возможность проверить ваш вызов в SQL сервер вернул некоторые данные, или что если бы у вас были какие-то данные, вы могли бы сопоставить их обратно в модель?
Если вы хотите проверить свой вызов в SQL вернул некоторые данные проверить мой ответ можно здесь
@Toran: то, что я тестирую,-это программное сопоставление данных, возвращенных из базы данных, с моделью домена quote-unquote. Поэтому я хочу смоделировать подключение к базе данных. Для другого вида теста я бы пошел на тотальное интеграционное тестирование.
28 я думаю, что вы довольно хорошо справились с этим, и я боялся, что это может быть так. Если у вас есть указатели на какие-либо статьи или что-то подобное, где кто-то сделал грязную работу и разложил ее на более легко усваиваемые шаги, я буду признателен. Образцы кода тоже не помешают. У меня есть ключ к тому, как подойти к этой проблеме, но прежде чем я действительно осмелюсь сделать это, мне нужно будет сделать другие вещи, и если тестирование этого потребует утомительного издевательства, то именно это я и сделаю.