我正在使用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()为null,请帮忙。
答案 0 :(得分:1)
我怀疑问题是NUnit正在不同的AppDomain中运行您的测试,但没有使用ExecuteAssembly
。来自documentation for Assembly.GetEntryAssembly
:
获取默认应用程序域中的进程可执行文件。在其他应用程序域中,这是
AppDomain.ExecuteAssembly
执行的第一个可执行文件。
目前还不清楚你真正希望获得哪个程序集 - 即使这个 为NUnit返回“适当”的东西,这可能是NUnit可执行文件,它远离任何配置目录你碰巧有。
基本上,我认为你应该至少提供另一种指定配置目录的方式 - 而可能想重新考虑是否使用GetEntryAssembly
是无论如何,这是个好主意。 (除了其他任何事情,你在处理器上调用GetConfiguration
并传入另一个处理器......这可能适合你的设计有点奇怪,但考虑到你的测试,它至少有点不寻常你传递对同一个对象的引用的情况。)
答案 1 :(得分:1)
我使用AppDomain.CurrentDomain.BaseDirectory
代替System.Reflection.Assembly.GetEntryAssembly().Location