Что происходит между TestMethods в модульных тестах MS Visual Studio - PullRequest
2 голосов
/ 07 сентября 2010

В заголовке сказано: что происходит между TestMethods в модульных тестах MS Visual Studio?

У меня есть набор TestMethods в TestClass, у которого есть метод TestInitialize.

Метод TestInitialize внутренне загружает тип через отражение (например, Type.GetType("MyContainer, MyContainerAssembly")). MyContainer - это класс, который наследуется от WindsorContainer (от Castle Windsor).

Когда я выбираю запускать все модульные тесты в решении, при первом вызове TestInitialize (для первого TestMethod) все работает хорошо. Когда второй TestMethod выполняется и вызывается TestInitialize, мой вызов Type.GetType возвращает значение null.

Я установил точку останова внутри метода TestInitialize и проверил это. Чтобы устранить проблему, я попытался в Немедленном Окне:

Assembly.Load("MyContainerAssembly")

который сработал ... тогда:

Assembly.Load("MyContainerAssembly").GetTypes()

а что ты знаешь? Он выдал исключение TypeLoaderException, сказав, что не может найти сборку Castle.Windsor. Проверен каталог bin \ debug для проекта модульного тестирования. Это там.

Итак, я попробовал: Assembly.Load ( "Castle.Windsor")

который работал ... тогда:

Assembly.Load("Castle.Windsor").GetAssemblies()

... не удалось загрузить Castle.Core ... так что тогда

Assembly.Load("Castle.Core")

тогда

Type.GetType("MyContainer, MyContainerAssembly")

снова ... и он вернул экземпляр Type, а не ноль.

Мысли

1 Ответ

3 голосов
/ 07 сентября 2010

Visual Studio не запускает тесты в выходной папке bin\Debug.Вместо этого он имеет отдельную папку TestResults, в которой создает новую подпапку и копирует сборки для каждого запуска теста .(Эта папка находится в той же папке, что и файл решения.) Упомянутые вами сборки, вероятно, не копируются.

Вы можете добавлять файлы через конфигурации тестового запуска: откройте меню «Тест», «Редактировать конфигурации тестового прогона»выберите тестовую конфигурацию для редактирования и выберите представление «Развертывание».Здесь вы можете добавить любые дополнительные файлы, которые необходимо развернуть.

В качестве альтернативы вы можете использовать атрибут DeploymentItem в своих тестах.

...