Реальные примеры приложений, написанных с использованием TDD и хороших тестовых покрытий? [закрыто]

17

Существуют ли какие-либо приложения с открытым исходным кодом, разработанные с использованием управляемой тестированием разработки, которые служат моделями того, как должно работать хорошее модульное тестирование?

Я бы предпочел видеть примеры в C # и .NET. (Обратите внимание, что я упомянул приложения, а не только библиотеки.)

Я программист среднего уровня, который действительно хочет верить и практиковать TDD. Приложение, над которым я работаю в своей повседневной работе, довольно сложное - около 1 миллиона строк кода - и я хотел бы представить больше модульного тестирования. У нас есть несколько модульных тестов, но мои усилия в TDD и в работе над кодом, который уже тестируется, не были обнадеживающими.

По моему общеизвестному ограниченному опыту, TDD, кажется, стимулирует большую сложность во имя развязки. Куски приложения, которые сложно протестировать - и которые по совпадению имеют тенденцию быть критическими - выталкиваются на периферию, в область интеграционных тестов, которые могут или не могут быть написаны. (Я имею в виду обычных подозреваемых здесь, доступ к файловой системе, гидратации объектов из базы данных, асинхронных веб-вызовов и т. Д.)

Тестируемый код имеет тенденцию вовлекать большое количество совместной работы между объектами и, возможно, некоторую простую потоковую логику, которая все происходит в памяти и которая, возможно, могла бы быть написана более простым и понятным способом, если бы не было необходимости полностью отделять все для тестирования.

Я понимаю методы насмешливых зависимостей и тому подобное, но по моему опыту интенсивное использование насмешек приводит к очень хрупким тестам. Если мой первый инстинкт, увидев, что куча тестов покраснела, звучит так: «Отлично, теперь я должен исправить все насмешки», тогда мои тесты превратились в сопротивление, а не в сеть безопасности.

Я пытаюсь преодолеть этот ментальный барьер, и как часть этого я читаю книгу Майкла Перса « Эффективная работа с устаревшим кодексом» . Я надеюсь, это покажет мне кое-что из того, что мне не хватает.

Я также хотел бы изучить некоторые нетривиальные приложения .NET с хорошим охватом кода, например систему управления контентом или приложение CRUD. Я, наверное, посмотрю на среду тестирования FitNesse, о которой говорит дядя Боб, но было бы неплохо увидеть что-то написанное на языке, с которым я больше всего знаком.

Любые предложения или слова мудрости будут оценены.

Джош Эрл
источник
2
Не совсем ... Мне интересно видеть примеры реальных приложений. Принятый ответ в этом посте рекомендует рамки тестирования. Я уже видел несколько примеров фреймворков и библиотек, но это не решает мой вопрос.
Джош Эрл
@JoshEarl - я согласен .. Я не думаю, что мой ответ ниже был бы уместен для другого поста
hanzolo

Ответы:

14

Я не знаю, использовался ли TDD, но звездным примером тестирования является sqlite, который имеет замечательный 100% охват ветвлений и имеет более чем в 1000 раз больше тестового кода и сценариев, чем кода продукта.

Брайан Оукли
источник
4
это звучит как огромная трата усилий, если их соотношение кода к тестовому коду такое высокое
Ryathal
6
@Ryathal: стоимость неудачи диктует усилия по тестированию, а не длину тестируемого кода. Учитывая достаточно широкое использование в достаточно критически важных подходах, тестирование, возможно, стоило того. Однако я не совсем уверен, что SQLite не переусердствовал.
thiton
3
sqlite определенно критически важен для многих людей. Вы можете быть удивлены тем, как часто он используется (например, OSX, iOS, Android OS). И вы должны понимать, что многие из этих строк тестового кода и данных, вероятно, были сгенерированы машиной. Промышленная база данных имеет множество преимуществ.
Брайан Оукли
10
SQLite является наиболее широко используется SQL базы данных на планете, это установка база на порядок больше , чем MySQL, PostgreSQL, SQL Server, Oracle, DB2 в сочетании . Это, наверное, один из наиболее широко используемых программных продуктов. Если бы в SQLite была ошибка, все смартфоны на планете перестали бы работать. Я думаю, что это оправдывает небольшую паранойю.
Йорг Миттаг
@ JörgWMittag Ого, я никогда не знал об SQLite. Забавное. Благодарю. Но в 1000 раз больше тестового кода. Это невероятно.
Майк Грызун
4

Возможно, вам нужен проект Orchard. Это приложение .NET / MVC / TDD, которое довольно сложное, но не слишком плохое и демонстрирует некоторые полезные практики и шаблоны.

http://orchard.codeplex.com/wikipage?title=solution

и я думаю, обновленная ссылка:

http://docs.orchardproject.net/

hanzolo
источник
Это выглядит многообещающе - не могу дождаться, чтобы покопаться. :)
Джош Эрл
0

Многие сторонние библиотеки с открытым исходным кодом являются TDDed. Библиотеки гибернации Rhinos, такие как RhinoMocks и NHibernate, создаются TDD их разработчиками, использующими XUnit в качестве среды модульного тестирования.

Теперь, с OSS, вы обычно не можете гарантировать, что ВСЕ в продукте было TDDed. Сообщество может иметь стандарты, включающие эту практику, и они могут даже использовать сборочного бота, который выполняет метрики покрытия кода, но TDD - это менталитет, который должен быть принят разработчиком, и общественность в целом может взять на себя обязательство открыть Исходные транки VCS, такие как на GitHub, любой может зафиксировать любое изменение с любым количеством тестового покрытия (или, если требуется покрытие, тесты могли быть написаны после факта, что является нарушением духа TDD, но на самом деле это не так. хороший способ поймать его на коммите).

Keiths
источник