我正在使用MSTest
并且我使用命令mstest /testsettings:local.Testsetting /testcontainer:folder\obj\Debug\test.dll
这是输出,
运行有以下问题: 警告:测试运行部署问题: 组件或模块 “Microsoft.Practices。棱镜'直接 或通过测试间接引用 找不到容器'test.dll'。 警告:测试运行部署问题: 组件或模块 'Project.Common.dll'直接或 通过测试间接引用 找不到容器'test.dll'。 警告:测试运行部署问题: 组件或模块 'Project.Infrastructure.dll'直接 或通过测试间接引用 找不到容器'test.dll'。 警告:测试运行部署问题: 组件或模块 “Microsoft.Practices。棱镜'直接 或通过测试间接引用 找不到容器'test.dll'。
我能做些什么,以便MSTest能够顺利运行。
答案 0 :(得分:4)
您可以在构建服务器的GAC中安装Prism文件。
答案 1 :(得分:3)
不会直接在测试中使用的所有程序集都不会复制到测试文件夹。因此,这些测试方法应该用以下属性进行修饰:
[DeploymentItem("Microsoft.Practices.Prism.dll")]
这可以在不将程序集添加到GAC的情况下解决问题。
答案 2 :(得分:0)
确定。 DeploymentItem是一种解决此问题的方法。但是,DeploymentItem有点脆弱。
以下是我修复它的方法。
"当前目录"必须与DeploymentItem对齐。我发现最好的折衷方案是将当前目录设置为.sln文件所在的位置。
这是我的文件夹结构。
C:\SomeRootFolder\
C:\SomeRootFolder\MySolution.sln
C:\SomeRootFolder\packages\
C:\SomeRootFolder\packages\MyNugetPackage.1.2.3.4\lib\net45\SomeThirdPartyDll.dll
C:\SomeRootFolder\MyTestProject\MyTestProject.csproj
C:\SomeRootFolder\MyTestProject\MyTestClass.cs
MyTestClass.cs
[TestClass]
public class MyTestClass
{
[TestMethod]
/* The DeploymentItem item below is for error ::: Warning: Test Run deployment issue: The assembly or module 'SomeDll' directly or indirectly referenced by the test container 'C:\SomeRootFolder\MyTestProject\bin\debug\MyTestProject.dll' was not found. */
/* There must be a CD (to the .sln folder) command... before the MsTest.exe command is executed */
[DeploymentItem(@".\packages\MyNugetPackage.1.2.3.4\lib\net45\SomeDll.dll")]
public void MyTest()
{
}
}
"技巧"是将CD(更改目录)写入包含.sln的文件夹。
REM Now the normal restore,build lines
nuget.exe restore "C:\SomeRootFolder\MySolution.sln"
REM the above nuget restore would create "C:\SomeRootFolder\packages\MyNugetPackage.1.2.3.4\lib\net45\SomeThirdPartyDll.dll"
MSBuild.exe "C:\SomeRootFolder\MySolution.sln" /p:Configuration=Debug;FavoriteFood=Popeyes /l:FileLogger,Microsoft.Build.Engine;logfile=MySolution.Debug.Build.log
REM (the below line is the trick to line up the 'current folder' with the relative path of the DeploymentItem)
cd "C:\SomeRootFolder\"
REM now the below will work without the annoying message, note that C:\SomeRootFolder\MyTestProject\bin\Debug\SomeThirdPartyDll.dll exists
MsTest.exe /testcontainer:"C:\SomeRootFolder\MyTestProject\bin\Debug\MyTestProject.dll" /resultsfile:MyTestProject.Dll.Results.trx
现在因为"当前目录" (CD的结果)位于" C:\ SomeRootFolder \",DeploymentItem相对路径正常工作。
Jimminy Crickets .......这有点疯狂。
注意,保罗·泰勒在这里回答
Running MsTest from the command line with a custom assembly base directory
对我不起作用。
答案 3 :(得分:0)
string value = AppDomain.CurrentDomain.BaseDirectory;
代码(在测试方法的起点)
在新添加的代码中添加断点,并检查value
变量的路径是什么。
继续测试过程,一切顺利后,导航到values
变量的文件夹。
您可能会看到文件夹中的所有dll。 只需复制它们并使用过去的软件,然后使用mstest命令行工具执行项目dll。
set mstestPath="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE"
%mstestpath%\mstest /testcontainer:CodedUITestProject1.dll