我在网络上做了很多研究,尝试了一些设置,但是我无法在命令行中再现在Visual 2012中运行MsTest的行为。
我们的解决方案由许多项目组成,它们构建在位于解决方案级别上的相同bin文件夹上(例如C:\MyS卷积\bin)--这是正在测试的代码(剪切)。测试被分组在一个单独的项目中,该项目驻留在它自己的解决方案中,并构建在它自己的bin文件夹中(例如C:\MyS卷积\Test\bin)。实际上有很多插件,因此我们希望MsTest在运行将所有内容复制到TestResults文件夹的测试整数时引用剪切的bin文件夹。在Visual 2012中,我们确实通过编辑.testrunconfig并将".\bin“指定为”要加载的程序集的根文件夹“(在编辑testrunconfig时在选项卡"Unit”中)实现了这一点。因此,我们可以在VS2012中加载测试解决方案,并在那里运行测试,而不必将bin文件夹内容复制到TestResults目录。
现在,我希望创建一个.bat文件,它将以与VS2012相同的方式运行MsTest,这样我们就可以省略只为运行测试而启动Visual。我现在正在研究如何在命令行上执行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:\MyS卷积\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>发布于 2015-07-03 14:53:04
这是由于MSTest错误,它将当前目录设置为自己的工作目录,而不是测试项目的bin (或部署)文件夹。解决方法是在测试类的构造函数中执行以下代码:
Environment.CurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);我从http://www.ademiller.com/blogs/tech/2008/01/gotchas-mstest-appdomain-changes-in-vs-2008/获得了这个想法;但是,请注意,至少在我的例子中,它需要设置Environment.CurrentDirectory,而不是像本文所建议的那样相反。
https://stackoverflow.com/questions/17907884
复制相似问题