Я использую 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() является нулевым, пожалуйста, помогите.
Я использовал AppDomain.CurrentDomain.BaseDirectory
вместо System.Reflection.Assembly.GetEntryAssembly().Location
Я подозреваю, что проблема заключается в том, что NUnit запускает ваши тесты в другом AppDomain, но без использования ExecuteAssembly
. Из документации для Assembly.GetEntryAssembly
:
Получает исполняемый файл процесса в домене приложения по умолчанию. В других доменах приложений это первый исполняемый файл, который был выполнен
AppDomain.ExecuteAssembly
.
Непонятно, какую сборку вы действительно хотите получить - даже если это вернет что-то "подходящее" для NUnit, вероятно, это исполняемый файл NUnit, который будет отлично от любых конфигурационных каталогов, которые у вас есть.
В принципе, я думаю, что вы должны, по крайней мере, предоставить альтернативный способ указания каталога конфигурации - и вам может GetEntryAssembly
пересмотреть вопрос о GetEntryAssembly
является ли использование GetEntryAssembly
хорошей идеей в любом случае. (Помимо всего прочего, немного странно, что вы вызываете GetConfiguration
на процессоре и передаете другой процессор... который может быть подходящим для вашего дизайна, но он по крайней мере несколько необычен, учитывая, что в вашем тестовом примере вы передавая ссылку на тот же объект.)
null
? Это не то же самое, что поиск исполняемой сборки NUnit ... как и для пути к временной папке, вероятно, из-за того, как вы запускаете NUnit. Вы можете настроить его для копирования сборок, которые он собирается тестировать, или нет. Возможно, вам следует использовать текущий каталог? Я полагаю, что текущий каталог обычно остается как тот, который содержит оригинальную тестовую сборку.