Получение локального пути во время модульного тестирования - PullRequest
4 голосов
/ 01 декабря 2011

Я создаю класс c # (Class.cs), который должен искать файл (FileINeedToFind.cs) по имени из локального каталога. Каталог находится в другом каталоге, чем файл класса.

структура папок:

Root  
   -> ClassFolder

      --> Class.cs

   -> FileFolder

      --> FileINeedToFind.cs

Когда я запускаю тест для класса, он всегда возвращается с путем к результатам теста.

Как я могу заставить класс получить свой собственный локальный путь, а не путь сборки результатов теста?

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

В MSTest тесты (по умолчанию) выполняются не в той папке, в которой находится ваш код, а через тестовое развертывание .Вы можете настроить то, что будет развернуто, но я склонен согласиться с @Jacob, что вы обычно не хотите этого делать.

Однако я не согласен с @Jacob о том, как получить текущий каталог в тесте.В MSTest правильный способ сделать это с помощью TestContext.DeploymentDirectory .

2 голосов
/ 01 декабря 2011

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

Короче говоря, это не то, что вы можете сделать чисто. Лучше всего, если ваш код не опирается на концепцию каталогов, относящихся к исходному коду. Это может помочь вам в достижении ваших целей, если вы измените действие сборки для искомого файла, чтобы он был скопирован в выходной каталог. Затем относительный путь этого файла во время выполнения должен отражать относительный путь в папке вашего проекта.

Чтобы получить путь к исполняемой сборке («текущий» путь может быть изменен любым другим исполняемым кодом, поэтому лучше не полагаться на это), используйте этот код:

System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...