2014-12-03 108 views
3

我已经编写了一个单元测试,它使用testsettings文件在OUT文件夹中部署一些引用的dll。我使用这个命令运行我的单元测试。Mstest单元测试从命令行失败

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe" 
"/testcontainer:C:\Unittests\unit_test.dll" 
"/runconfig:C:\Unittests\unit_test_settings.testsettings" 
"/resultsfile:C:\Unittests\unit_test_results.trx" 

在我的单元测试的一些测试运行正常,但有些失败,出现以下错误。

失败的对象初始化(ISupportInitialize.EndInit)。名为“some_referenced_dll.resources.dll,PublicKeyToken =”for fallback culture“en”的卫星程序集无法找到或无法加载。这通常是一个设置问题。请考虑重新安装或修复应用程序。
System.Resources.MissingSatelliteAssemblyException:命名的卫星总装...

在试图解决这个问题,我加入了some_referenced_dll.resouce.dll作为testsettings文件部署项目,但没有帮助。

我可以看到dll被复制到OUT文件夹中。

此外,在将some_referenced_dll.dll作为项目的引用添加后,测试在VS 2012中运行良好。

更多信息:

但是也有一些使用一些其他的DLL作为refrence直接(比如ref_dll_2.dll)和传球测试。这个ref_dll_2.dll也在OUT文件夹中。

我面临的问题与dll(some_referenced_dll.resouce.dll)不直接引用我的测试。我的单元测试调用了一些开发代码,它试图初始化失败的类。

强制加载dll会有意义吗?有没有办法做到这一点?

回答

2

好吧,我终于解决了这个问题。记录完整性。

问题是我的MSTEST单元测试无法找到资源/卫星程序集(some_referenced_dll.resources.dll)并因此抛出异常。我正在使用deploymentItem属性来部署DLL(some_referenced_dll.dll),但不是资源DLL。解决方案是使用deploymentItem并部署资源dll(some_referenced_dll.resources.dll)。

Bill Wang在thread中提供了一个很好的答案,帮助解决了这个问题。这是一个简单的修复一个非常恼人的问题。