MSTest无法找到装配体

时间:2011-03-30 02:09:21

标签: c# unit-testing mstest vs-unit-testing-framework

我正在使用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能够顺利运行。

4 个答案:

答案 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