MsTest, DataSourceAttribute - как заставить его работать с файлом, созданным во время выполнения? - PullRequest
6 голосов
/ 22 сентября 2011

для какого-то теста мне нужно запустить управляемый данными тест с конфигурацией, которая генерируется (с помощью отражения) в методе ClassInitialize (с использованием отражения). Я перепробовал все, но просто не могу правильно настроить источник данных.

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

Метод испытания:

[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.CSV",
    "|DataDirectory|\\EntityMappingsTests.Types.csv",
    "EntityMappingsTests.Types#csv",
    DataAccessMethod.Sequential)
]
[TestMethod()]
public void TestMappings () {

Очевидно, что файл является EntityMappingsTests.Types.csv. Это должно быть в DataDirectory.

Теперь в методе Initialize (помеченном ClassInitialize) я собрал это и попытался написать.

ГДЕ мне писать? ГДЕ DataDirectory?

Я пытался:

File.WriteAllText(context.TestDeploymentDir + "\\EntityMappingsTests.Types.csv", types.ToString());
File.WriteAllText("EntityMappingsTests.Types.csv", types.ToString());

Оба результата приводят к тому, что «модульному тестовому адаптеру не удалось подключиться к источнику данных или прочитать данные». Точнее:

Сведения об ошибке: ядру базы данных Microsoft Jet не удалось найти Объект 'EntityMappingsTests.Types.csv'. Убедитесь, что объект существует и что вы правильно пишете его имя и путь.

Так, где я должен поместить этот файл?

Я также попытался просто записать его в текущий каталог и извлечь часть DataDirectory - тот же результат. К сожалению, поддержка отладки здесь ограничена.

Ответы [ 2 ]

5 голосов
/ 30 сентября 2011

Пожалуйста, используйте инструмент ProcessMonitor от technet.microsoft.com / en-us / sysinternals / bb896645 . Поместите фильтр в MSTest.exe или ассоциированный файл qtagent32.exe и выясните, из каких мест он пытается загрузить и в какой момент времени в процессе загрузки теста. Тогда, пожалуйста, предоставьте обновленную информацию по этим деталям здесь.

1 голос
/ 24 июля 2013

После добавления файла CSV в проект VS вам необходимо открыть его свойства.Установите для свойства «Копировать в выходной каталог» значение «Копировать всегда».По умолчанию DataDirectory находится в месте расположения скомпилированного исполняемого файла, который запускается из выходного каталога, поэтому находит его там.

...