Путь к тестовым файлам данных для модульного тестирования
В настоящее время я использую стандартный пакет Microsoft Unit Test в VS 2008. Также установлен ReSharper 4.5. В моих модульных тестах используется метод TestInitialize, который предварительно загружает файл данных. Путь к этому файлу тестовых данных будет отличаться в зависимости от того, будет ли я запускать Unit Test из VS 2008 с помощью стандартной команды Ctrl-R + Ctrl-T в сравнении с командой выполнения Resharper Unit Test.
Как мой метод TestInitialize знает правильный путь к файлам данных Unit Test?
Update:
Данные теста достаточно значительны, что я не хочу вставлять их в строку, поэтому предпочитаем хранить ее как внешний файл. Файловая структура моего тестового проекта - это стандартный проект Unit Test, созданный приложением MVC. В корне тестового проекта была создана новая папка под названием "Test Data". В эту папку я бы хотел получить доступ независимо от тестового бегуна.
Ответы
Ответ 1
Вы говорите, что расположение тестового файла будет отличаться в зависимости от тестового бегуна, поэтому я предполагаю, что он включен в проект и скопирован вместе с dll.
string path = AppDomain.CurrentDomain.BaseDirectory;
Это даст вам папку, в которой вы выполняете тест.
[изменить]
В Visual Studio.
Resharper → Options → Tools → Unit Testing → Run Results from: Указанная папка (или изменить выходную папку проекта вашего тестового проекта)
Где вы можете указать папку ваших тестовых данных или относительно указанной папки.
Ответ 2
(исходный ответ обновлен, чтобы также принять пути вывода многоцелевых проектов основного ядра .net)
Предполагается, что ваши файлы тестовых данных находятся в папке, которую вы передаете в качестве параметра "testDataFolder" внутри корневой папки "Test_Data":
public static string GetTestDataFolder(string testDataFolder)
{
string startupPath = ApplicationEnvironment.ApplicationBasePath;
var pathItems = startupPath.Split(Path.DirectorySeparatorChar);
var pos = pathItems.Reverse().ToList().FindIndex(x => string.Equals("bin", x));
string projectPath = String.Join(Path.DirectorySeparatorChar.ToString(), pathItems.Take(pathItems.Length - pos - 1));
return Path.Combine(projectPath, "Test_Data", testDataFolder);
}
Ответ 3
Я бы создал тестовые данные с нуля в процедуре инициализации тестового набора.
Это будет означать, что он не зависит от того, находится ли он в определенном месте, и он также будет защищен от случайного вмешательства.
Ответ 4
Использование встроенного ресурса отлично сработало для меня. Очень легко, используя простые инструкции здесь: http://www.vcskicks.com/embedded-resource.php