2014-01-30 146 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

相关问题