Существуют ли какие-либо приложения с открытым исходным кодом, разработанные с использованием управляемой тестированием разработки, которые служат моделями того, как должно работать хорошее модульное тестирование?
Я бы предпочел видеть примеры в C # и .NET. (Обратите внимание, что я упомянул приложения, а не только библиотеки.)
Я программист среднего уровня, который действительно хочет верить и практиковать TDD. Приложение, над которым я работаю в своей повседневной работе, довольно сложное - около 1 миллиона строк кода - и я хотел бы представить больше модульного тестирования. У нас есть несколько модульных тестов, но мои усилия в TDD и в работе над кодом, который уже тестируется, не были обнадеживающими.
По моему общеизвестному ограниченному опыту, TDD, кажется, стимулирует большую сложность во имя развязки. Куски приложения, которые сложно протестировать - и которые по совпадению имеют тенденцию быть критическими - выталкиваются на периферию, в область интеграционных тестов, которые могут или не могут быть написаны. (Я имею в виду обычных подозреваемых здесь, доступ к файловой системе, гидратации объектов из базы данных, асинхронных веб-вызовов и т. Д.)
Тестируемый код имеет тенденцию вовлекать большое количество совместной работы между объектами и, возможно, некоторую простую потоковую логику, которая все происходит в памяти и которая, возможно, могла бы быть написана более простым и понятным способом, если бы не было необходимости полностью отделять все для тестирования.
Я понимаю методы насмешливых зависимостей и тому подобное, но по моему опыту интенсивное использование насмешек приводит к очень хрупким тестам. Если мой первый инстинкт, увидев, что куча тестов покраснела, звучит так: «Отлично, теперь я должен исправить все насмешки», тогда мои тесты превратились в сопротивление, а не в сеть безопасности.
Я пытаюсь преодолеть этот ментальный барьер, и как часть этого я читаю книгу Майкла Перса « Эффективная работа с устаревшим кодексом» . Я надеюсь, это покажет мне кое-что из того, что мне не хватает.
Я также хотел бы изучить некоторые нетривиальные приложения .NET с хорошим охватом кода, например систему управления контентом или приложение CRUD. Я, наверное, посмотрю на среду тестирования FitNesse, о которой говорит дядя Боб, но было бы неплохо увидеть что-то написанное на языке, с которым я больше всего знаком.
Любые предложения или слова мудрости будут оценены.
источник
Ответы:
Я не знаю, использовался ли TDD, но звездным примером тестирования является sqlite, который имеет замечательный 100% охват ветвлений и имеет более чем в 1000 раз больше тестового кода и сценариев, чем кода продукта.
источник
Возможно, вам нужен проект Orchard. Это приложение .NET / MVC / TDD, которое довольно сложное, но не слишком плохое и демонстрирует некоторые полезные практики и шаблоны.
http://orchard.codeplex.com/wikipage?title=solution
и я думаю, обновленная ссылка:
http://docs.orchardproject.net/
источник
Многие сторонние библиотеки с открытым исходным кодом являются TDDed. Библиотеки гибернации Rhinos, такие как RhinoMocks и NHibernate, создаются TDD их разработчиками, использующими XUnit в качестве среды модульного тестирования.
Теперь, с OSS, вы обычно не можете гарантировать, что ВСЕ в продукте было TDDed. Сообщество может иметь стандарты, включающие эту практику, и они могут даже использовать сборочного бота, который выполняет метрики покрытия кода, но TDD - это менталитет, который должен быть принят разработчиком, и общественность в целом может взять на себя обязательство открыть Исходные транки VCS, такие как на GitHub, любой может зафиксировать любое изменение с любым количеством тестового покрытия (или, если требуется покрытие, тесты могли быть написаны после факта, что является нарушением духа TDD, но на самом деле это не так. хороший способ поймать его на коммите).
источник