Assembly.GetEntryAssembly () в NUnit

1

Я использую NUnit для тестирования одной функции, где мне нужно загрузить XML файл в объект. Файл XML находится в расположении Консольного приложения.

У меня есть следующий метод, где будет читаться конфигурация:

public string GetConfiguration(TempFlexProcessor processor)
{
    var exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
    var configPath = Path.Combine(Path.GetFullPath(exePath), "configuration");
    var configFile = string.Format(@"{0}.xml", processor.GetType().Name);
} 

Теперь в моем тесте NUnit у меня есть метод тестирования, где я тестирую GetConfiguration:

[Test]
    public void TempFlexProcessorExecuteTest()
    {
        #region Given


        #endregion

        #region When

        var tempFlexProcessor = new TempFlexProcessor();
        var actual = tempFlexProcessor.GetConfiguration(tempFlexProcessor);

        #endregion

        Assert.AreEqual("path of the file", actual);
    }

Но System.Reflection.Assembly.GetEntryAssembly() является нулевым, пожалуйста, помогите.

Теги:
nunit
.net-assembly

2 ответа

1

Я использовал AppDomain.CurrentDomain.BaseDirectory вместо System.Reflection.Assembly.GetEntryAssembly().Location

  • 0
    отлично работал для меня!
1

Я подозреваю, что проблема заключается в том, что NUnit запускает ваши тесты в другом AppDomain, но без использования ExecuteAssembly. Из документации для Assembly.GetEntryAssembly:

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

Непонятно, какую сборку вы действительно хотите получить - даже если это вернет что-то "подходящее" для NUnit, вероятно, это исполняемый файл NUnit, который будет отлично от любых конфигурационных каталогов, которые у вас есть.

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

  • 0
    Метод GetConfiguration находится в классе консольного приложения TempFlexProcessor, и, в основном, когда я пытаюсь вызвать GetConfiguration из NUnit, он ищет исполняемую сборку Nunit. Хотя я получаю сборку TemplFlexProcessor, я получаю некоторый путь к временной папке.
  • 0
    @MilindChavan: я думал, что вы сказали, что он возвращает null ? Это не то же самое, что поиск исполняемой сборки NUnit ... как и для пути к временной папке, вероятно, из-за того, как вы запускаете NUnit. Вы можете настроить его для копирования сборок, которые он собирается тестировать, или нет. Возможно, вам следует использовать текущий каталог? Я полагаю, что текущий каталог обычно остается как тот, который содержит оригинальную тестовую сборку.

Ещё вопросы

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