2014-10-08 45 views
1

我正在使用NUnit來測試一個功能,我需要將XML文件加載到對象。該XML文件位於控制檯應用程序的位置。NUnit中的Assembly.GetEntryAssembly()

我有以下方法,其中的配置將被讀取:在我NUnit測試

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); 
} 

現在我有測試方法,我測試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 ()爲空,請幫助。

回答

1

我懷疑問題是NUnit在不同的AppDomain中運行測試,但沒有使用ExecuteAssembly。從documentation for Assembly.GetEntryAssembly

獲取進程在默認應用程序域中的可執行文件。在其他應用程序域中,這是由AppDomain.ExecuteAssembly執行的第一個可執行文件。

目前尚不清楚哪些組件,你真的想 - 即使這一些回報,「適當」的,NUnit的,那很可能是NUnit的可執行文件,這將是從您發生的任何配置目錄得好遠具有。

基本上,我認爲你應該至少提供指定配置目錄的另一種方式 - 你可能要重新考慮使用GetEntryAssembly是否是一個好主意,反正。 (除此之外,你在處理器上調用GetConfiguration並傳入另一個處理器......這可能適合你的設計,但這至少有點不尋常,因爲在你的測試案例中你是傳遞到相同的對象的引用。)

+0

的GetConfiguration方法是在控制檯應用程序類TempFlexProcessor和基本上,當我我試圖從NUnit調用GetConfiguration它尋找Nunit可執行程序集。即使我得到了TemplFlexProcessor的程序集,我也得到了一些臨時文件夾路徑。 – 2014-10-08 11:14:36

+0

@MilindChavan:我以爲你說過它返回'null'?這與查找NUnit可執行程序集......與temp文件夾路徑不同,這可能是因爲您運行NUnit的方式。您可以將其配置爲複製要測試或不測試的程序集。也許你應該使用* current *目錄?我相信當前目錄通常保留爲包含原始測試程序集的目錄。 – 2014-10-08 11:20:34

1

我用AppDomain.CurrentDomain.BaseDirectory代替System.Reflection.Assembly.GetEntryAssembly()位置:

+0

對我很好! – 2016-07-23 17:41:31