Хорошо - этот пост здесь помог мне понять, что мне нужно сделать, БЕЗ необходимости вручную добавлять элементы в файл .testsettings
.
Шаг 1 - Включить тест MS DeploymentItem
атрибут.
Сначала нам нужно включить / включить атрибут DeploymentItem
.
Перейти ТЕСТ -> РЕДАКТИРОВАТЬ НАСТРОЙКИ ТЕСТА -> Текущие активные настройки .. например:: Local (local.testsettings)
Теперь перейдите к DEPLOYMENT и убедитесь, что Enable Deployment отмечен галочкой.(По умолчанию он выключен).
Шаг 2. Проверьте свойства файла
Теперь нам нужно убедиться, что файл, который вы хотите использовать вмодульный тест, это настройка для копирования в каталог BIN при компиляции.В модульном тесте MS Test могут использоваться только файлы, которые находятся в каталоге BIN.Зачем?Поскольку каждый раз при запуске MS Test, он должен делать копию источников ... и это означает, что он делает копию файлов текущего каталога BIN (для текущей конфигурации).
Например... Текущая конфигурация Отладка (в отличие от выпуска).
Затем я добавляю свой файл ... (обратите внимание на структуру папок в проекте) ...
, а затем убедитесь, чтоэтот файл ВСЕГДА копируется в каталог bin при компиляции проекта.
СОВЕТ ПРОФ: копирование всегда будет работать, но всегда копировать исходный файл поверхфайл назначения .. даже если они идентичны.Вот почему я предпочитаю Копировать, если новее ... но все, что плавает на вашей лодке
Хорошо, дамы и господа, - все еще со мной?Wikid.
Когда мы скомпилируем, файл теперь должен существовать в каталоге Bin ....
Шаг 3 - Теперь используйте атрибут DeploymentItem
Хорошо, теперь мы можем наконец использовать атрибут DeploymentItem
в нашем коде.Когда мы делаем это, это говорит MSTest скопировать файл (из расположения относительно каталога bin) в новый каталог MS Test ...
[TestMethod]
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
public void Parsing100LogFileEntriesReturnsANewParsedLogEntriesWith100Items()
{
// Arrange.
const string fileName = @"Test Data\100LogEntries.txt";
ILogEntryService logEntryService = new PunkBusterLogEntryService();
// Act.
var parsedLogEntries = logEntryService.ParseLogFile(fileName, 0);
// Assert.
Assert.IsNotNull(parsedLogEntries);
Assert.AreEqual(100, parsedLogEntries.LogEntries.Count);
// Snipped the remaining asserts to cut back on wasting your time.
}
Итак, давайте разберемся с этим ..
[TestMethod]
Мы все знаем, что это такое.
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
Начиная с каталога bin, перейдите в папку Test Data
и скопируйте файл 100LogEntries.txt
в папку назначения Test Data
в корневом каталоге вывода MS Test, который MS Test создает при запуске каждого теста.
Так выглядит моя структура выходных папок.(Извините за весь беспорядок ...)
и вуаля!у нас есть файлы развертывания, программно.
PRO TIP # 2 - если вы не используете 2-й строковый аргумент в атрибуте DeploymentItem
, то файл будет скопирован в корневую папку OUT,текущего теста MS.
const string fileName = @"Test Data\100LogEntries.txt";
Теперь путь к файлу указывается относительно папки OUT
для текущего теста MS.Таким образом, я явно сказал развернуть файл в каталог с именем Test Data
... поэтому мне нужно убедиться, что я правильно ссылаюсь на это в своем коде, когда хочу прочитать в файле.
Просто чтобы подтвердить -> полный путь к этому имени файла переводится в что-то вроде C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
.. для текущего теста MS.
HTH.
Теперь есть изображениеЕдинорог, за то, что так много читал:)