Ответ 1
Изменения в VS2015 довольно заметны, используйте Test > Debug > All Tests, чтобы получить представление. Вы можете видеть, что теперь у него новый тестовый хост-процесс, его имя TE.ProcessHost.Managed.exe
, хранящееся в каталоге C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow.
Предыдущие версии VS использовали другой хост vstest.executionengine.exe. Одним заметным изменением в новом тестовом хосте является то, что он больше не является программой консольного режима. Что-то вы можете увидеть, запустив Dumpbin.exe/headers на exe.
Еще один способ увидеть основную проблему - с Диспетчером задач. Обратите внимание, что запуск теста в старой версии VS приводит к добавлению процесса conhost.exe
. Это процесс, которому принадлежит консольное окно для приложения в режиме консоли. Проблема, которую я видел ранее, заключается в том, что этот процесс имеет тенденцию к утечке, а не завершается, когда тест завершается. Добавляя все больше экземпляров conhost.exe, в какой-то момент, исследуя эту проблему, у меня было 12 из них. Предположительно, изменения в VS2015 предназначены для решения этой проблемы.
Технически вы можете настроить unit test с помощью файла .runsettings и использовать элемент <ForcedLegacyMode>
, чтобы заставить старый процесс тестового хоста быть использованным. Это, однако, не влияет на результат этого теста, похоже, что они рассматривали это несколькими способами.
Чтобы получить достаточное количество угадываний, я рекомендую вам использовать файл connect.microsoft.com для отправки отчета об обратной связи. Вы можете процитировать этот Q + A для справки.
Между тем, вы можете рассмотреть обходной путь. Обратите внимание, что Console.Clear()
, как правило, является создателем проблем, он также не работает при нормальном использовании, когда вывод приложения режима консоли перенаправляется. Очень легко сделать из командной строки с помощью оператора >
. Какова конечная причина, по которой она терпит неудачу в unit test. Вы захотите сделать код упругим, чтобы он мог нормально работать как в производстве, так и в unit test. Вот так:
if (!Console.IsOutputRedirected) Console.Clear();
Для этого требуется таргетинг .NET 4.5 или выше. Вы можете использовать код в этом сообщении SO, если вам нужно настроить таргетинг на более ранние версии.