Приложение.ExecutablePath отличается в модульном тесте, чем в Debug C#

При отладке строки

 Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);

Приложение.Исполняемый файл вернет мои программы .Путь к файлу EXE в BinDebug.

однако во время модульного тестирования он вернет Visual Studios .EXE путь к файлу, а не мои программы. Есть ли какой-то способ обойти это? Я искал, и я заметил, что люди упомянутые, чтобы попробовать использовать что-то вроде

var execPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);

а потом проходя что вроде

Configuration config = ConfigurationManager.OpenExeConfiguration(execPath);

однако execPath, кажется, возвращает только папку, а не сами программы EXE.

спасибо

1 ответ

  1. На основе моего комментария:

    Если вы говорите о «модульных тестах», по какой-либо причине ваш код не может
    изолировать зависимости, чтобы можно было имитировать / заглушить то, что возвращается из
    Config Manager? Модульный тест не должен полагаться на пути в файловой системе.

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

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

    http://chrisondotnet.com/2011/05/configurationmanager-wrapper-for-unit-testing/