Не удалось поставить в очередь тестовый запуск [...] Тестовый запуск Проблема развертывания: расположение файла или каталога [..] не является доверенным - PullRequest
2 голосов
/ 02 февраля 2010

В настоящее время я разрабатываю решение для управления заказами образцов, используя VB.NET 2008, NHibernate, FluentNHibernate и Linq для NHibernate.

Во время выполнения я получаю следующую ошибку:

Не удалось поставить в очередь тестовый запуск. [...] Ошибка развертывания тестового запуска: расположение файла или каталога 'C: \ Open \ Projects \ examples [..] \ FluentNHibernate.dll' не является доверенным.

И я получаю то же самое с NHibernate.Linq.dll

Не удалось поставить в очередь тестовый запуск. [...] Ошибка развертывания тестового запуска: расположение файла или каталога 'C: \ Open \ Projects \ examples [..] \ NHibernate.Linq.dll' не является доверенным.

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

Я прочитал кое-что о запуске
" C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ caspol -machine -addgroup All_Code -url file: // comdumap: / * FullTrust -n DevelopmentMappedDrive "
(на французском языке, но на самом деле всего несколько слов, которые легко перевести с помощью Языковых инструментов Google.)

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

РЕДАКТИРОВАТЬ 1 : я нашел другую ссылку, в которой говорится об устранении ошибки, например: Проблема с развертыванием тестового запуска
Похоже, что после разблокировки через Проводник Windows это может позволить этим файлам быть развернутым, чтобы выполнить тесты. Таким образом, у меня продолжает появляться эта ошибка, и мои тесты не запускаются.

Спасибо за любую помощь!

Ответы [ 2 ]

4 голосов
/ 26 февраля 2010

Передано как ответ и уточнено.

Тот факт, что вы запускаете код модульного тестирования, который не выполняется из-за ненадежного расположения, является признаком того, что вы не проводите модульное тестирование, вы проводите интеграционное тестирование. Это хрупко и склонно к другим проблемам, поэтому я постараюсь избегать этого в максимально возможной степени.

Юнит-тестирование должно проверять небольшие кусочки логики, единицы кода, такие как классы, методы и т. Д.

Когда вы извлекаете код, выполняющий одно из следующих действий, у вас могут возникнуть проблемы:

  • Код, который требует базы данных
  • Код, который требует файл (или доступ к файлу)
  • Код, который взаимодействует с какой-либо внешней системой (например, COM-объектом, веб-службой, чем-либо по сети)

Например, что произойдет, если:

  • Вы запускаете модульные тесты на своей машине, но дома? У вас есть доступ к тем же системам?
  • База данных изменяется?
  • База данных перемещена на другой сервер, чтобы освободить место?
  • Диск заполнен?
  • Сеть не работает или происходит сбой?

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

Это делает ваши тесты хрупкими и подверженными ошибкам.

Когда тест не пройден, вы всегда захотите сказать: «Хорошо, мы должны что-то сделать, чтобы сломать код». Вам никогда не захочется слышать это «аааа, этот тест все время не проходит, просто оставьте его, возможно, это снова сервер».

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

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

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

Например:

  • Если ваш код должен записывать в файл, выделите код для записи в файл в новый класс, используя метод, подобный WriteToFile, оберните класс в интерфейсе и передайте объект логическому коду в качестве параметра. Затем в своих модульных тестах создайте новый класс, реализующий тот же интерфейс, но он просто записывает, что метод был вызван, и не пытайтесь записать что-либо в файл. Таким образом, вы можете проверить, что «метод, который должен был записать в файл, действительно вызывался с правильными данными», а не «файл был успешно записан».

Для серверов баз данных и веб-серверов и аналогичных программ вы можете сделать то же самое.

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

1 голос
/ 03 февраля 2010

Мне удалось развернуть тестовый прогон, выполнив шаги в этого решения .

Внимательно прочитайте ваш путь к файлу или каталогу, так как я сам ошибся и подумал, что это решение не подходит для моего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...