2014-01-30 145 views
3

我已經將一些測試用例與單元測試關聯在一個項目中。該項目將構建並複製到共享上的放置位置。當我去運行這些測試時,由於來自作爲這些測試的一部分而包含的非託管DLL的System.DllNotFoundExceptions,我得到了很多失敗?Microsoft測試管理器如何運行自動單元測試?

有誰知道爲什麼發生這種情況?我有一個實驗室環境設置,測試(假設)在該機器上運行。什麼時候這些測試運行的工作流程是什麼? TestController是否將單元測試DLL複製到實驗室環境中的本地計算機上,還是試圖直接從構建文件夾中運行?

以下是錯誤的堆棧跟蹤。請注意,c:\ Builds \不在測試機器上,這對我來說似乎頗爲懷疑。

Test method OutputProcessing.Integration.PanaceaOutputG1.ReactorCoreSimulationResults threw exception: 
System.DllNotFoundException: Unable to load DLL 'ge.gnf.cedar06.c.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 

Gnf.Cedar.NativeMethods.ATACHF(Int32& fileCode, String fileName, Int32& openMode, Int32[] stat) 
Gnf.Cedar.ManagedMethods.Atachf(String fileName, FileAccess access, Int32[] stat) 
Gnf.Cedar.Cypress.CedarFile.OpenCedarFile(String path, FileAccess access, FileSizeHint hint, AuditMode auditMode, ChainingOrderOption chainingOrder, Boolean createIfMissing) 
Gnf.Cedar.Cypress.CedarFile..ctor(String path, FileMode mode, FileAccess access, FileSizeHint hint, AuditMode auditMode, ChainingOrderOption chainingOrder) 
Gnf.Cedar.Cypress.CedarFile..ctor(String path, FileMode mode, FileAccess access) 
GE.GNF.Acumen.Cedar.DataAccess.CedarRepository.GetCedarFile() in c:\Builds\11\ACUMEN\DEV Test Build\src\Acumen\Cedar\Cedar.DataAccess\CedarRepository.cs: line 67 
GE.GNF.Acumen.Cedar.DataAccess.CedarRepository..ctor(String fullFilePath) in c:\Builds\11\ACUMEN\DEV Test Build\src\Acumen\Cedar\Cedar.DataAccess\CedarRepository.cs: line 40 
GE.GNF.Acumen.Cedar.DataAccess.CedarRepository..ctor(String fullFilePath, String qualifier) in c:\Builds\11\ACUMEN\DEV Test Build\src\Acumen\Cedar\Cedar.DataAccess\CedarRepository.cs: line 43 
OutputProcessing.Integration.PanaceaOutputG1.ReactorCoreSimulationResults() in c:\Builds\11\ACUMEN\DEV Test Build\src\Acumen\Auto Integration Tests\OutputProcessing.Integration\PanaceaOutputG1.cs: line 58 

回答

6

包含測試實現的DLL將被複制到測試機器。

您可以激活測試代理日誌並檢查日誌文件中已部署哪些文件。

要激活這些日誌:

  1. 轉到C:\ Program Files文件(x86)的\微軟的Visual Studio 11.0 \ Common7 \ IDE文件夾
    (這是路徑2012測試代理,如果您使用的是舊版本,則路徑略有不同,爲 )。
  2. 更改文件QTAgentService.exe.config(設置EqtTraceLevel 「4」 和CreateTraceListener爲 「yes」):
<configuration> 
<system.diagnostics> 
    <switches> 
    <!-- You must use integral values for "value". 
    Use 0 for off, 1 for error, 2 for warn, 3 for info, and 4 for verbose. --> 
    <add name="EqtTraceLevel" value="4" /> 
    </switches> 
</system.diagnostics> 
<appSettings> 
    <add key="CreateTraceListener" value="yes"/> 
</appSettings> 
</configuration> 

重啓測試代理,你會發現文件VSTTAgent.log在同一目錄下創建。

立即開始測試,然後檢查此日誌文件。你會發現像這樣的條目(只搜索「複製遠程文件」:

I, 5856, 4, 2014/01/31, 09:50:58.283, <computer name>\QTAgentService.exe, Copying remote file: C:\Users\<tfs build user>\AppData\Local\VSEQT\QTController\<test run>\Deployment\<your DLL file> to: C:\Users\<local user>\AppData\Local\VSEQT\QTAgent\<test run>\<test configuration>\Deployment\<your DLL file> 

現在,您可以檢查是否所有的DLL已經部署

注:路徑位於機器測試控制器正在運行時,目的地路徑位於所述試驗機(其中測試代理正在運行)上。

據我所知,非託管DLL將不會與「單元測試DLL」一起部署,因此您必須確保它們將被部署。
可以使用測試設置做到這一點:

enter image description here

+0

請問[DeploymentItem]屬性還工作嗎? –

+0

是的,[DeploymentItem]也會起作用。 – Elena

+0

您可否詳細介紹一下如何使用測試設置上的部署選項?當我在那裏添加一個文件時,它使用我機器的絕對路徑。那甚至可以在自動化環境中工作? – julealgon

相關問題