Существуют ли какие-либо приложения с открытым исходным кодом, разработанные с использованием управляемой тестированием разработки, которые служат моделями того, как должно работать хорошее модульное тестирование?
Я бы предпочел видеть примеры в C # и .NET. (Обратите внимание, что я упомянул приложения, а не только библиотеки.)
Я программист среднего уровня, который действительно хочет верить и практиковать TDD. Приложение, над которым я работаю в своей повседневной работе, довольно сложное - около 1 миллиона строк кода - и я хотел бы представить больше модульного тестирования. У нас есть несколько модульных тестов, но мои усилия в TDD и в работе над кодом, который уже тестируется, не были обнадеживающими.
По моему общеизвестному ограниченному опыту, TDD, кажется, стимулирует большую сложность во имя развязки. Куски приложения, которые сложно протестировать - и которые по совпадению имеют тенденцию быть критическими - выталкиваются на периферию, в область интеграционных тестов, которые могут или не могут быть написаны. (Я имею в виду обычных подозреваемых здесь, доступ к файловой системе, гидратации объектов из базы данных, асинхронных веб-вызовов и т. Д.)
Тестируемый код имеет тенденцию вовлекать большое количество совместной работы между объектами и, возможно, некоторую простую потоковую логику, которая все происходит в памяти и которая, возможно, могла бы быть написана более простым и понятным способом, если бы не было необходимости полностью отделять все для тестирования.
Я понимаю методы насмешливых зависимостей и тому подобное, но по моему опыту интенсивное использование насмешек приводит к очень хрупким тестам. Если мой первый инстинкт, увидев, что куча тестов покраснела, звучит так: «Отлично, теперь я должен исправить все насмешки», тогда мои тесты превратились в сопротивление, а не в сеть безопасности.
Я пытаюсь преодолеть этот ментальный барьер, и как часть этого я читаю книгу Майкла Перса « Эффективная работа с устаревшим кодексом» . Я надеюсь, это покажет мне кое-что из того, что мне не хватает.
Я также хотел бы изучить некоторые нетривиальные приложения .NET с хорошим охватом кода, например систему управления контентом или приложение CRUD. Я, наверное, посмотрю на среду тестирования FitNesse, о которой говорит дядя Боб, но было бы неплохо увидеть что-то написанное на языке, с которым я больше всего знаком.
Любые предложения или слова мудрости будут оценены.