2010-04-22 3 views
4

Я запускаю единичный тест C# (VS 2008). В рамках теста я пишу настройки, которые должны привести к сохранению данных в user.config.C# Единичный тест: запись в настройки в модульном тесте не сохраняет значения в user.config

Settings.Default.X = "History"; // X is string 
Settings.Default.Save(); 

Но это просто не создает файл (я перепроверить под "C: \ Documents и Settings \ HW \ Local Settings \ Application Data").

Если я создаю тот же материал, что и консольное приложение, нет проблем с сохранением данных (того же кода).

Есть ли что-то особенное, мне нужно подумать об этом в UnitTest?

ответ

5

Я попробовал это с Visual Studio 2010 в Windows 7, а среда Visual Studio Unit Test фактически создала временную папку для тестовых приложений, в которой я нашел файл user.config с правильными настройками. Я думаю, что это может быть то же самое на VS 2008. Схема путь к папке этих имеет вид:

Windows 10 путь:

C: \ Users \ $ USER $ \ AppData \ Local \ Microsoft_Corporation \ UnitTestAdapter__Running__StrongName_ {GUID} \ {номер}

Windows Vista/Seven путь:

C: \ Users \ $ USER $ \ AppData \ Local \ Microsoft_Corporation \ TestAppDoma в {Number}

Windows XP путь:

C: \ Documents и Settings \ $ USER $ \ Local Settings \ Microsoft_Corporation \ TestAppDomain {Number}

удачи.

+1

Большое спасибо, вы мне очень помогли. Незначительное изменение: его .. \ Локальные настройки \ Данные приложения \ Microsoft_Corporation \ ... для XP – HorstWalter

1

Проекты тестирования модулей - это только библиотеки классов. Контекста приложения нет, и, следовательно, у вас могут быть проблемы, потому что объект настроек не знает, что компания/приложение может загрузить файл настроек.

Я не уверен, но это может быть просто создание его в памяти.

+0

Поскольку методы тестирования должны быть выполнены, платформа unit-test будет создавать тестовые классы в реальном контексте приложения. Таким образом, тесты выполняются в каталоге в файловой системе, что подразумевает наличие файлов конфигурации. – Ucodia

+0

Моя ошибка заключалась в вызове Reset() перед перезагрузкой(). Я не знал, что Reset() также сохраняет в одном и том же очередь, я думал, что он сбрасывает значения только в памяти. – HorstWalter

0

Спасибо за помощь, это помогло многим найти проблему. Подсказка с тропой помогла мне «увидеть, что происходит» и найти нарушителя спокойствия.

Кстати, этот фрагмент

config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) 
config.FilePath 

полезно найти место хранения.

Моя проблема была в том, что я вызвал Reset() перед перезагрузкой(). На самом деле мой тестовый пример проверяет правильность хранения объектов, поэтому он сохраняет и перезагружает настройки. Я не знал о том, что Reset() «сбрасывает и сохраняет на диске» - я предполагал, что он только сбрасывается в памяти. Я должен только вызвать Reload().

Поскольку все тестовые примеры имеют свой собственный каталог, настройки должны быть созданы (сохранены) в тестовом примере.

+0

Это может помочь найти файл user.config, но на самом деле не показывает конфигурацию пользователя. Он показывает только конфигурацию приложения. В обычной ситуации файл конфигурации приложения и пользователя принадлежит к различным каталогам, поэтому будьте осторожны! – Ucodia