Как Вы даете NUnit команду загружать dll.config файл блока из определенного каталога?

Это используется в стеке unwiding таблицы, которые Вы видите, например, в выводе блока мой ответ на другой вопрос . Как упомянуто на том ответе, его использование определяется C++ ABI Itanium, где это называют Стандартная программа Личности .

причина это "работает" путем определения его, как глобальный ПУСТОЙ пустой указатель, вероятно, потому что ничто не выдает исключение. Когда что-то попытается выдать исключение, тогда Вы будете видеть, что он неправильно себя ведет.

, Конечно, если ничто не использует исключения, можно отключить их с -fno-exceptions (и если ничто не использует RTTI, можно также добавить -fno-rtti). При использовании их Вы имеете к (как другие ответы, уже отмеченные) ссылка с g++ вместо gcc, который добавит -lstdc++ для Вас.

13
задан Steve Guidi 11 September 2009 в 19:37
поделиться

3 ответа

В блоге NUnit объясняется, почему файлы конфигурации загружаются именно так. В основном они сказали, что NUnit позволяет фреймворку обрабатывать файлы конфигурации и не выполняет никакого управления.

Вы также можете использовать файл testProject.config , который будет загружен в вашем случае, для ссылки на файлы конфигурации для каждой из сборок. Использование атрибута файла appSettings для добавления ключей.

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

Надеюсь, это поможет.

2
ответ дан 2 December 2019 в 00:58
поделиться

Решение configSource element , данное MarkLawrence , - это то, что я искал, и оно прекрасно работает. Однако проблема при реализации этого решения состоит в том, чтобы загрузить конфигурацию сборки при запуске тестов как из явного проекта NUnit (как в в моем случае ), так и при выполнении модульных тестов для изолированной сборки (нет явный проект). Для этого потребовались следующие изменения в макете моего файла:

+ TestFolder
    testProject.nunit
    testProject.config
  + AssemblyAFolder
      assemblyA.dll
      assemblyA.dll.config
      assemblyA.dll.configfragment
  + AssemblyBFolder
      assemblyB.dll
      assemblyB.dll.config
      assemblyB.dll.configfragment

Файлы configfragment созданы для хранения конфигурации сборки, которая когда-то была в соответствующих файлах config . Впоследствии файлы config изменены, чтобы содержать только элемент configSource с относительным путем к соответствующему файлу configfragment . Обратите внимание, что этот подход не работает только тогда, когда assemblyA.dll и assemblyB.dll требуется один и тот же раздел конфигурации, поскольку при создании возникнет конфликт. testproject.config .

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

void WithConfigurationFile(Action method)
{
    // Create the assembly configuration.
    string settingsSection = "myConfigSectionName";
    Configuration config =
        ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    config.Sections.Add(
        settingsSection,
        new ConfigSectionType(/*config element values*/);
    config.Save();

    try
    {
        // Invoke the method with the new configuration.
        ConfigurationManager.RefreshSection(settingsSection);
        method();
    }
    finally
    {
        // Revert the assembly configuration.
        File.Delete(config.FilePath);
        ConfigurationManager.RefreshSection(settingsSection);
    }
}

С помощью ConfigurationManager. OpenExeConfiguration () перегрузка, которая не принимает путь, мы загружаем конфигурацию из рабочего каталога хост-приложения, который изменяется в зависимости от того, как вы запускаете тесты NUnit. Кроме того, блок try / finally гарантирует, что ваша конфигурация сборки не будет мешать другим тестам, которые могут требовать или не требовать такой конфигурации.

Наконец, для использования в модульном тесте:

[Test]
void VerifyFunctionality
{
    WithConfigurationFile(delegate
    {
        // implement unit test and assertions here
    });
}

Я надеюсь, что это поможет другим, которые могут сталкивались с похожими проблемами!

3
ответ дан 2 December 2019 в 00:58
поделиться

Используйте атрибут configfile на уровне конфигурации в вашем файле .nunit:


<Config name="Debug" configfile="myconfigfilenamegoeshere.config />

2
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: