В модульном тесте Visual Studio 2008 изменения кода не регистрируются, если я не собрал полное решение - PullRequest
1 голос
/ 06 мая 2010

Вот сценарий:

  1. Изменить мой код:
  2. Изменить мой модульный тест для этого кода
  3. С курсором внутри класса / метода модульного теста,Вызвать команду VS2008 «Выполнить тесты в текущем контексте»
  4. Окно «Вывод» в Visual Studio указывает, что код dll и dll теста оба успешно построены (в таком порядке)

Проблема, однако, в том, что в модульном тесте не используется последняя версия библиотеки DLL, которую он только что построил.Вместо этого он использует ранее созданную dll (в которой нет обновленного кода), поэтому тест не пройден.

При добавлении нового метода это приводит к MethodNotImplementedException, а также при добавлениикласс, это приводит к TypeLoadException, потому что модульный тест думает, что новый код есть, а его нет !.Если я просто обновляю существующий метод, то тест просто не пройден из-за неверных результатов.

Я могу «обойти» проблему, выполнив это

  1. Изменить мой код:
  2. Изменить мой модульный тест для этого кода
  3. Вызвать команду VS2008 'Build Solution'
  4. Поместив курсор внутри класса / метода модульного теста, вызватьКоманда VS2008 «Выполнить тесты в текущем контексте»

Проблема в том, что выполнение полного решения по сборке (даже если ничего не изменилось) занимает более 30 секунд, так как у меня около 50 проектов на C # и VS2008не достаточно умен, чтобы понять, что нужно рассмотреть только 2 из них.Необходимость подождать 30 секунд, чтобы просто изменить 1 строку кода и перезапустить модульный тест, ужасна.

Могу ли я что-нибудь сделать, чтобы это исправить?Ни один из моих кодов не находится в GAC или что-нибудь забавное в этом роде, это просто обычные старые библиотеки DLL (в сравнении с .NET 3.5SP1 на машине с win7 / 64-битной версией)

Пожалуйста, помогите!

1 Ответ

1 голос
/ 06 мая 2010

После еще нескольких копаний я исправил проблему:

  1. Показать список литературы по тесту dll
  2. Удалить ссылку на код dll из списка
  3. Повторно добавьте его.

Затем я просмотрел .csproj, чтобы увидеть, что изменилось, и это было так

Старый и сломанный

<ProjectReference Include="..\Base\Base.csproj">
  <Project>{1C61F557-24C5-4B4A-90A8-08D0DCEE15A1}</Project>
  <Name>Base</Name>
  <Private>False</Private>
</ProjectReference>

Новое и хорошее

<ProjectReference Include="..\Base\Base.csproj">
  <Project>{1C61F557-24C5-4B4A-90A8-08D0DCEE15A1}</Project>
  <Name>Base</Name>
</ProjectReference>

Бит <Private>False</Private>, очевидно, означает «Копировать локально», так что это объясняет это. Примечание для себя: не забудьте установить Copy Local на true для модульных тестов!

...