Как найти физический путь внутри интеграционного теста C # .NET во время выполнения? [Дубликат]

1

Чтобы завершить интеграционный тест вокруг старого старого процесса, который создает подробные файлы на основе определенных входных данных, мне нужно динамически загружать DLL, предоставляя полный путь к файлу.

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

Поскольку это находится в тесте, я не могу полагаться на что-то вроде HttpContext.Current.Server.MapPath() или Request.ApplicationPath, так как Current будет иметь значение null при запуске теста.

За исключением написания взлома для развертывания DLL, мне нужно динамически загружать в специальную папку в корне любого диска, который может создавать и запускать приложение, знает ли кто-нибудь хорошую стратегию.NET, чтобы найти физический путь теста во время выполнения?

Я использую NUnit в веб-приложении С#, а также утверждение стиля утверждения утверждения, поэтому простой тест, который должен был бы сделать это, будет выглядеть так:

[Test]
public void ShouldGenerateFileConsistently()
{
    string pathToDll = FindRelativePathToDllBasedOnPhysicalPath(); // <-- what I need to figure out

    string generatedFileContents = OutputManager.GenerateReportUsingDynamicDll(pathToDll);

    Approvals.Verify(generatedFileContents);
}
  • 0
    Что будет "взломать"? Если это вариант развертывания DLL с приложением, которое его использует, вы можете взглянуть на DependencySharp, чтобы упростить управление им.
  • 0
    Я закрыл это как обман, хотя я утверждаю, что ответ ниже лучше, чем принятый ответ в другом вопросе.
Теги:
unit-testing

1 ответ

2
Лучший ответ
var codebase = Assembly.GetExecutingAssembly().CodeBase;
var pathUrlToDllDirectory = Path.GetDirectoryName(codebase);
var pathToDllDirectory = new Uri(pathUrlToDllDirectory).LocalPath;
  • 0
    Спасибо за быстрый ответ, спонсор! Вы знаете, сразу после того, как я опубликовал сообщение, что-то щелкнуло, чтобы я попытался немного Path.GetFullPath(".") с System.IO.Path, и я понял, что Path.GetFullPath(".") Фактически вернет мне то, что я ищу, что это именно то, что возвращает ваш пример, и в одну строку. Ваш ответ помогает подтвердить эту идею, хотя я пока не могу сказать, является ли одно более правильным, чем другое. Похоже, путь - это движение. Ура!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню