Я думаю, вам нужно немного больше разделить ваш код ...
Вы говорите:
Допустим, у меня есть функция, которая
- загружает данные из базы данных в набор данных,
- форматирует загруженные данные (форматы хранятся в каком-то внешнем XML-файле) и
- наконец сериализует набор данных в файл.
Звучит как минимум 3-4 работы ...
Если вы разделите свой код еще немного, то вы можете протестировать каждую из этих функций, не обращая на них внимания.
Если вы просто хотите использовать Dataset.WriteXML, тогда вам не нужно это проверять. Это функция Framework, которая работает довольно хорошо. Попробуй сделать несколько насмешек, чтобы подделать это. Как именно зависит от вашего решения ...
Ответ на комментарий:
Создание всех этих небольших классов с их собственными тестами облегчит тестирование, а также сделает ваши функции небольшими и компактными (-> легко тестировать). Вы бы проверили, является ли содержимое набора данных именно тем, что вам нужно, а не если набор данных правильно сериализован в XML-файл. Вы также проверите, правильно ли ваш форматер выполняет свою функцию, без каких-либо зависимостей от какой-либо другой логики. Вы также протестировали бы доступ к данным, но без доступа к БД (снова заглушки / пробки)
После того, как вы узнаете, что все это работает так, как должно, вы «просто» проверяете, что метод propper в наборе данных будет вызван, и это должно вас удовлетворить, поскольку вы уже тестировали другие части в изоляции.
Сложная часть о юнит-тестировании - это получение значимых тестов. Они должны быть "быстрыми" и "простыми"
Чтобы сделать тесты быстрыми, вы не должны касаться вещей, которые вы не можете контролировать:
- Webservices
- файлсистемах
- Базы данных
- Com Objects
Чтобы упростить их, вы сохраняете свои предложения сосредоточенными на одной задаче, на которой начинается SRP, о которой вы уже упоминали. Взгляните на этот ответ ... Он также укажет на другие принципы разработки "SOLID"
https://stackoverflow.com/questions/1423597/solid-principles/1423627#1423627