13

我正在使用 MSTest

我使用命令 mstest /testsettings:local.Testsetting /testcontainer:folder\obj\Debug\test.dll

这是输出,

运行存在以下问题:警告:测试运行部署问题:程序集或模块“Microsoft.Practices. 未找到测试容器“test.dll”直接或间接引用的 Prism。警告:测试运行部署问题:未找到测试容器“test.dll”直接或间接引用的程序集或模块“Project.Common.dll”。警告:测试运行部署问题:未找到测试容器“test.dll”直接或间接引用的程序集或模块“Project.Infrastructure.dll”。警告:测试运行部署问题:程序集或模块“Microsoft.Practices. 未找到测试容器“test.dll”直接或间接引用的 Prism。

我该怎么做才能使 MSTest 运行良好。

4

4 回答 4

4

您可以在构建服务器的 GAC 中安装 Prism 文件。

于 2011-03-30T05:58:10.227 回答
3

所有未直接在测试中使用的程序集都不会复制到测试文件夹中。因此,这些测试方法应该用如下属性修饰:

[DeploymentItem("Microsoft.Practices.Prism.dll")]

这解决了问题,无需将程序集添加到 GAC。

于 2014-07-29T12:58:21.447 回答
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

我的TestClass.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()
    {
    }
}

“诀窍”是对包含 .sln 的文件夹进行 CD(更改目录)。

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 相对路径可以正常工作。

吉米蟋蟀.......这有点疯狂。

请注意,保罗泰勒在这里回答

使用自定义程序集基目录从命令行运行 MsTest

对我不起作用。

于 2016-04-28T15:00:57.133 回答
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
于 2017-01-18T17:39:16.267 回答