2013-06-25 7 views
2

Еще один день - еще одна проблема с VS2012 и модульными тестами: наше решение имеет три тестовых проекта, в том числе 335 различных модульных тестов. Все эти тесты успешно выполняются локально на разных машинах, но при проверке на нашем сервере сборки TFS 2012 каждый раз обнаруживается только 235 тестов.Сборки TFS2012 не обнаруживают всех модульных тестов в решении VS2012

Существует 15 различных классов испытаний, содержащих модульные тесты, некоторые из которых используют новую структуру Fakes, другие MOQ, некоторые из них или оба. Все классы находятся в тестовых проектах (сборках), заканчивающихся Испытание, все классы заканчиваются на Тест.

Некоторые классы вообще не обнаруживаются во время тестового прогона как часть процесса сборки, в других классах, например. 8 из 12 тестов обнаружены и запущены.

Принимая пример «8 из 12», создаваемая [ProjectNameTest] .dll показывает все 12 тестов с использованием .NET Reflector 7.0, это просто так, что некоторые из тестов не выполняются. Я также не могу найти никаких сходств (например, тесты с использованием Fakes/MOQ/...) среди тестов, которые не запускаются/не обнаруживаются.

Параметры сборки используется определяют Test Sources Spec в **\*.dll (он имел обыкновение быть **\*test*.dll, но я изменил этот раз, чтобы убедиться, что все файлы будут приняты во внимание).

Для Run Settings Первоначально я начал с Run Settings File и CodeCoverageEnabled. В рамках попытки решить проблемы я также изменил это на пользовательский файл UnitTest.runsettings, к сожалению, с тем же результатом.

Кто-нибудь знает, почему есть все эти проблемы? Каковы могут быть причины? VS2010 и Moles работали намного лучше, VS2012 вызывает много неприятностей в последнее время.

Update

Через несколько месяцев мы наконец обновили установку TFS обновление 3, но это сделало вещи еще хуже. Модульные тесты на сервере сборки больше не запускаются. Включение дампов и их анализ показали, что выбрано StackOverflowException, но нет индикатора о тесте, который может вызвать его. Опять же, локально на разных системах разработчиков тесты проходят без проблем.

Мы рассматриваем возможность открытия вызова в Microsoft, поскольку мы потратили слишком много времени на то, чтобы все это сработало (снова). Родинки были намного лучше ... Я буду держать это обновление, как только будет некоторый прогресс.

Update 2

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

+0

Могут ли быть неправильные настройки в диспетчере конфигурации? Как и платформа для одного из ваших тестовых проектов, может быть неправильной, чтобы она не строилась, а затем не тестировалась? При просмотре файла журнала - это сборка тестового проекта? –

+0

Настройки сборки проекта одинаковы для всех конфигураций, мы трижды проверяем, что, к сожалению, проблема должна быть где-то еще. То, что я еще не пробовал (он не был доступен во время публикации исходного вопроса), он установил VS2012 Update 3 (а не RC). Сделай это, вернувшись на работу через две недели. – Gorgsenegger

+0

Вам удалось найти решение для этого? –

ответ

0

Наконец-то был найден ответ - проблемы с случайным сбоем теста на сервере сборки TFS были вызваны использованием Microsoft Fakes Framwork. В наших локальных системах все работало так, как ожидалось, - мы определили Fakes в наших различных тестовых проектах (обычно один тестовый проект для каждого «нормального» проекта).

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

Вместо того чтобы иметь поддельные определения как часть каждого проекта в нашем решении, мы изменили его так, чтобы у нас было широкое определение подделок (например, System.Web.Fakes.dll), с которым мы ссылаемся в каждом тестовом проекте, где мы (Добавить существующий элемент => Добавить как ссылку). Это решило проблемы с запуском модульных тестов на сервере сборки, все тесты проходят снова.

0

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

+0

Это не так, такие тесты должны завершиться неудачно с соответствующим сообщением об ошибке. Случается, что каждый раз, когда тесты выполняются как часть процесса сборки, произвольные тесты терпят неудачу. – Gorgsenegger

+0

Это не редкость для ошибок теста, которые не имеют смысла. Какие ошибки вы видите? Я видел много ошибок BadImage, которые обычно вызывались запуском неправильной архитектуры инструмента vsconsole. –