我已将一些测试用例与项目中的单元测试相关联。该项目是构建并复制到共享上的放置位置。当我去运行这些测试时,由于作为这些测试的一部分包含的非托管DLL的System.DllNotFoundExceptions,我遇到了很多失败?
有谁知道为什么会这样?我有一个实验室环境设置,测试(据说)在该机器上运行。这些测试运行时的工作流程是什么? 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
答案 0 :(得分:6)
包含测试实现的DLL将被复制到测试计算机。
您可以激活测试代理日志,并在日志文件中签入已部署的文件。
要激活这些日志:
<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。
注意: 源路径位于运行测试控制器的计算机上,目标路径位于测试计算机上( Test Agent 正在运行)。
尽管我知道非托管DLL不会与“单元测试DLL”一起部署,因此您必须确保它们将被部署。
您可以使用测试设置: