Модульные тесты в VS2008 принудительно перестраивают все зависимости

Почему, когда я прохожу свои модульные тесты в VS2008 — либо с помощью запуска, либо с помощью отладки — VS настаивает на перестроении всех зависимостей тестового проекта, то есть проектов, которые я тестирую в модульных тестах?

Иногда они не менялись — я просто изменил некоторые модульные тесты. Или, может быть, я модифицировал одну из сборок, а он настаивает на том, чтобы пересобрать их все.

У меня есть обычные ссылки на проект в проекте модульного тестирования на другие мои проекты.

Любые предложения будут приняты с благодарностью, так как это замедляет нашу способность использовать TDD настолько эффективно, насколько мы могли бы.

Спасибо!


person Isaac Abraham    schedule 11.11.2009    source источник
comment
Должен сказать, что это не мой опыт. Если я только изменю тест, VS не перестроит все решение...   -  person Mark Seemann    schedule 12.11.2009
comment
Я знаю. Я попробовал это прошлой ночью с моего домашнего компьютера, и там, похоже, тоже ничего не происходит. Я даже только что создал два проекта библиотеки классов, A и B. A ссылается на B. Если я делаю сборку A, он перестраивает B, даже если B не изменился.   -  person Isaac Abraham    schedule 12.11.2009


Ответы (1)


ОК, я нашел, по крайней мере, причину проблемы и несколько неудовлетворительный обходной путь!!

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

Почему этот ВСЕГДА перекомпилируется? Это как-то связано с Entity Framework. Создайте пустой проект и добавьте в него пустую модель EF — она ВСЕГДА будет перекомпилироваться, даже если вы ее не меняли. Затем это приводит к перекомпиляции любых зависимостей, предположительно из-за того, что метаданные сборки данных изменились.

Обходной путь, который я нашел, заключается в том, чтобы вместо добавления ссылки на проект добавить прямую ссылку на сборку в сборку данных. Недостатком является то, что вы не можете сделать, например. Перейти к определению в VS2008, чтобы перейти к типу напрямую, но, учитывая, что мы редко делаем это с этой конкретной сборкой, это не является серьезной проблемой.

Делая это, я сократил время сборки только для запуска одного модульного теста с ~ 20 секунд до ~ 7 секунд — что имеет огромное значение, когда вы пишете десятки модульных тестов каждый день!

Если у кого-нибудь есть какие-либо идеи относительно того, почему модели EF делают это, мне было бы очень интересно услышать...

person Isaac Abraham    schedule 13.11.2009