Подтвердить что ты не робот

Путь к тестовым файлам данных для модульного тестирования

В настоящее время я использую стандартный пакет 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". В эту папку я бы хотел получить доступ независимо от тестового бегуна.

4b9b3361

Ответ 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