2012-12-27 59 views
2

我正在運行編碼的ui自動化,並定義了一個名爲[ExternalDataSource()]的方法屬性來讀取文檔(csv,xml ...)並將數據解析爲一些字典。我將它拷貝到這裏,所以你可以有一個更好的瞭解:運行時的程序集位置更改

[System.AttributeUsage(System.AttributeTargets.Method)] 
public class ExternalDataSource : System.Attribute 
{ 
    public ExternalDataSource(string filename) 
    { 
     DirectoryInfo di = new DirectoryInfo(Assembly.GetExecutingAssembly().Location); 

     string file = Path.Combine(Path.GetDirectoryName(di.FullName), filename); 

     try 
     { 
      code 
     } 
     catch (Exception) 
     { 
      throw new UITestException("Cannot load data source document"); 
     } 
    } 
} 

在這裏面我嘗試訪問Assembly.GetExecutingAssembly().Location拿到被複制到TestResult中/ Out文件夾中的文件。我在整個應用程序中僅將該屬性分配給一個TestMethod(),並在調試時發現應用程序輸入屬性的c'tor兩次。兩次的位置都不同。一旦它來自bin/Debug文件夾,另一次來自TestResults/Out文件夾。兩個問題:

  1. 爲什麼調試器輸入該屬性兩次,如果我只在應用程序中調用它一次?
  2. 爲什麼同一組件的位置發生變化?

回答

0

那麼它似乎沒有人有答案,但在使用mstest.exe與vs2012 JIT調試我發現了一個奇怪的命令行調試運行:

在班上把一個System.Diagnostics.Debugger.Break()當其中本屬性是從MSTest.exe調用的抖動,但是當此斷點處於裝有此屬性的testmethod中時,調用了QTAgent32.exe的。我已經實現了一個單例類來處理我的參數,並且當它通過MSTest在此屬性中的ExternalDataSource中填充時,當進入QTAgent32(測試)時,它是空的。

爲我工作的解決方案只是用[TestInitialize()]上的數據初始化該單例。

希望這有助於某人。