Модульные тесты в VS2008 принудительно перестраивают все зависимости
Почему, когда я прохожу свои модульные тесты в VS2008 - используя run или debug - VS настаивает на пересоздании всех зависимостей тестового проекта, то есть проектов, которые я тестирую в модульных тестах?
Иногда они не менялись - я только что исправил некоторые юнит-тесты. Или, возможно, я изменил одну из сборок - но она настаивает на том, чтобы восстановить их все.
У меня есть нормальные ссылки проекта в проекте модульного тестирования на мои другие проекты.
С благодарностью принимаются любые предложения, так как это замедляет нашу способность использовать TDD настолько эффективно, насколько это возможно.
Спасибо!
1 ответ
Хорошо, я нашел по крайней мере причину проблемы и несколько неудовлетворительный обходной путь для этого!!
Я начал с добавления нового проекта модульного тестирования и добавления к нему отдельных ссылок на проекты из своего основного решения. Я обнаружил, что мой проект данных (бизнес-сущностей) страдает от проблемы, которую я описываю, и потому что все мои другие сборки каким-то образом зависят от моего проекта данных, тот факт, что одна перекомпилируется, вызывает все остальные.
Почему этот ВСЕГДА перекомпилируется? Это как-то связано с Entity Framework. Создайте пустой проект и добавьте к нему пустую модель EF - он ВСЕГДА будет перекомпилироваться, даже если вы его не меняли. Это приводит к тому, что любые зависимости перекомпилируются, предположительно из-за изменения метаданных сборки данных.
Обходной путь, который я нашел, состоит не в добавлении ссылки на проект, а в добавление прямой ссылки на сборку в сборку данных. Недостатком является то, что вы не можете, например, перейти к определению в VS2008, чтобы перейти непосредственно к типу, но, учитывая, что мы редко делаем это с этой конкретной сборкой, это не является большой проблемой.
Делая это, я сократил время сборки только для запуска одного модульного теста с ~20 секунд до ~7 секунд - что имеет огромное значение, когда вы пишете десятки модульных тестов каждый день!
Если у кого-то есть идеи относительно того, почему модели EF делают это, мне было бы очень интересно услышать...