我在网上进行了大量的研究并尝试了一些设置,但我无法在命令行上重现在Visual Studio 2012中运行MsTest的行为。
我们的解决方案包含许多项目,这些项目构建到位于解决方案级别的相同bin文件夹(例如C:\ MySolution \ bin) - 这是被测试代码(CUT)。测试分组在一个单独的项目中,该项目驻留在自己的解决方案中,并构建在自己的bin文件夹中(例如C:\ MySolution \ Tests \ bin)。实际上有很多插件,因此我们希望MsTest在运行将所有内容复制到TestResults文件夹的测试内容时引用CUT bin文件夹。我们在Visual Studio 2012中通过编辑.testrunconfig并将“。\ bin”指定为“要加载的程序集的根文件夹”(在编辑testrunconfig时在“单元测试”选项卡中)来实现此目的。因此,我们可以在VS2012中加载测试解决方案并在那里运行测试,而无需将bin文件夹内容复制到TestResults目录。
现在我想创建一个运行MsTest的.bat文件,就像在VS2012中一样,这样我们就可以省略启动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>
答案 0 :(得分:2)
经过更多搜索后,我们更改为使用VS2012附带的测试控制台运行器:
VSTest.Console.exe Tests \ bin \ Tests.dll / Framework:framework40 /Settings:LocalTestRun.testrunconfig
这适用于applicationBaseDirectory
的相对路径。
答案 1 :(得分:1)
这是由于MSTest错误将当前目录设置为其自己的工作目录,而不是测试项目的bin(或部署)文件夹。解决方法是在测试类的构造函数中执行以下代码:
Environment.CurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
我从v:link.typolink
ViewHelper得到了这个想法;但请注意,至少在我的情况下,它需要设置Environment.CurrentDirectory,而不是反过来,如文章中所建议的那样。