【发布时间】:2013-07-28 11:48:51
【问题描述】:
我在网络上做了很多研究并尝试了一些设置,但我无法重现在 Visual Studio 2012 的命令行中运行 MsTest 的行为。
我们的解决方案由许多项目组成,这些项目构建到位于解决方案级别的同一 bin 文件夹(例如 C:\MySolution\bin) - 这是被测代码 (CUT)。测试被分组在一个单独的项目中,该项目驻留在自己的解决方案中并构建在自己的 bin 文件夹中(例如 C:\MySolution\Tests\bin)。确实有很多插件,因此我们希望 MsTest 在运行测试时引用 CUT bin 文件夹,而不是将所有内容复制到 TestResults 文件夹。我们确实在 Visual Studio 2012 中通过编辑 .testrunconfig 并将“.\bin”指定为“要加载的程序集的根文件夹”(在编辑 testrunconfig 时的“单元测试”选项卡中)实现了这一点.所以我们可以在 VS2012 中加载测试解决方案并在那里运行测试,而无需将 bin 文件夹内容复制到 TestResults 目录。
现在我想创建一个 .bat 文件,它可以像在 VS2012 中一样运行 MsTest,这样我们就可以省略启动 Visual Studio 来运行测试。我现在正在研究如何在命令行上执行 MsTest,但一直很沮丧。这是我尝试过的(在 VS 命令提示符下的解决方案级别执行的命令):
MsTest /testcontainer:Tests\bin\Tests.dll
这根本不起作用,它甚至找不到 Tests.dll 需要运行的引用 dll。所以我重新使用了配置并再次运行它:
MsTest /runconfig:LocalTestRun.testrunconfig /testcontainer:Tests\bin\Tests.dll
还是不行。它可以开始测试,但都失败了。我收到了很多类似的警告
警告:测试运行部署问题:未找到测试容器“C:\MySolution\Tests\bin\tests.dll”直接或间接引用的程序集或模块“....”。
最后它说:
配置的应用程序基目录 'C:\MySolution\TestResults\User_Machine 2013-07-28 13_16_59\Out\bin' 不存在。将使用测试目录。
当我将 testrunconfig 中的选项 applicationBaseDirectory更改为绝对路径 (C:\MySolution\bin) 时,它起作用了。我仍然收到很多警告,例如:
警告:测试运行部署问题:未找到测试容器“C:\MySolution\Tests\bin\tests.dll”直接或间接引用的程序集或模块“....”。
但无论如何,指定绝对路径并不是一个真正可行的解决方案。 如何在命令行上使用不同但相对的程序集基目录运行 MsTest?
我的 LocalTestRun.testrunconfig 如下:
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Local Test Run" id="...." xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>This is a default test run configuration for a local test run.</Description>
<Deployment>
<DeploymentItem filename="Tests\....\Resources\" />
</Deployment>
<Execution hostProcessPlatform="MSIL">
<TestTypeSpecific>
<UnitTestRunConfig testTypeId="....">
<AssemblyResolution applicationBaseDirectory=".\bin">
<TestDirectory useLoadContext="true" />
</AssemblyResolution>
</UnitTestRunConfig>
<WebTestRunConfiguration testTypeId="....">
<Browser name="Internet Explorer 7.0">
<Headers>
<Header name="User-Agent" value="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" />
<Header name="Accept" value="*/*" />
<Header name="Accept-Language" value="{{$IEAcceptLanguage}}" />
<Header name="Accept-Encoding" value="GZIP" />
</Headers>
</Browser>
</WebTestRunConfiguration>
</TestTypeSpecific>
<AgentRule name="LocalMachineDefaultRole">
</AgentRule>
</Execution>
</TestSettings>
【问题讨论】:
-
对于未来的读者,请在此处查看我的答案:stackoverflow.com/questions/5481120/…
标签: visual-studio unit-testing visual-studio-2012 mstest