Итак, я работаю над устаревшим кодом, который сильно влияет на ручные операции с базой данных. Я пытаюсь сохранить некоторое подобие качества здесь, поэтому я стараюсь как можно больше использовать TDD.
Код, над которым я работаю, должен быть заполнен, скажем, List<Foo>
из 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 было слишком страшным для моих вкусов в последний раз, когда я проверял.
Редактировать: я также в настоящее время ограничен C # 2.