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



我在web上做了很多研究,并尝试了一些设置,但我无法在命令行上重现在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目录。

现在,我想创建一个.bat文件,它将以与VS2012中相同的方式运行MsTest,这样我们就可以省略启动Visual Studio来运行测试。我现在正在研究如何在命令行上执行MsTest,但一直很沮丧。这就是我所尝试的(在VS命令提示符中在解决方案级别执行的命令):

MsTest/testcontainer:测试\bin\Tests.dll

这根本不起作用,它甚至找不到Tests.dll需要运行的引用dll。所以我重新使用了配置并再次运行:

MsTest/runconfig:LocalTestRun.testreconfig/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.testreconfig如下:

<?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>

经过更多搜索,我们改为使用VS2012:中包含的测试控制台运行程序

VSTest.Console.exe Tests\bin\Tests.dll/Framework:framework40/Settings:LocalTestRun.testreconfig

这适用于相对路径applicationBaseDirectory

这是由于MSTest错误将当前目录设置为自己的工作目录,而不是测试项目的bin(或部署)文件夹。解决方法是在测试类的构造函数中执行以下代码:

Environment.CurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

我是从http://www.ademiller.com/blogs/tech/2008/01/gotchas-mstest-appdomain-changes-in-vs-2008/;但是,请注意,至少在我的情况下,它需要设置Environment.CurrentDirectory,而不是像文章中建议的那样设置相反的内容。

最新更新