Короче говоря, у меня есть решение, которое отлично работает в среде IDE, и все модульные тесты отлично работают с графическим интерфейсом NUnit (через плагин NUnitit VS2008). Однако, когда я запускаю средство запуска сборки TeamCity, все модульные тесты, требующие доступа к файлам (например, для запуска тестов для определенных файлов XML), я просто получаю System.IO.DirectoryNotFoundExceptions.
Причина этого ясна: он ищет те, которые поддерживают файлы XML, загруженные различными модульными тестами в неправильную папку.
Структура моих модульных тестов выглядит так:
+-- project folder
+-- unit tests folder
+-- test.xml
+-- test.cs
+-- project file.xaml
+-- project file.xaml.cs
У всех моих проектов есть собственная папка UnitTests, которая содержит файл .cs и любые файлы XML, схемы XML и т. Д., Необходимые для запуска тестов.
Поэтому, когда я пишу свой test.cs, он ищет в коде "test.xml", потому что они находятся в одной папке (на самом деле я делаю что-то вроде .... \ unit tests \ test.xml, но это вроде глупо). Как я уже сказал, тесты в NUnit проходят отлично. Но это потому, что модульные тесты являются частью проекта. При запуске модульных тестов из TeamCity я выполняю их для сборок, которые копируются в папку вывода основного приложения. Эти XML-файлы модульного теста не следует не волей-неволей копировать в папку вывода только для того, чтобы тесты прошли успешно.
Может ли кто-нибудь предложить лучший метод организации моих модульных тестов в каждом проекте (которые являются зависимостями для основного приложения), чтобы я мог выполнять модульные тесты из NUnit и из средства запуска сборки TeamCity? Единственный другой вариант, который я могу придумать, - это просто поместить тестовые XML-данные в код, а не загружать их из файла. Я бы предпочел не делать этого.