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

And*_*eas 6 unit-testing mstest visual-studio visual-studio-2012

我在网上做了很多研究并尝试了一些设置,但是我无法在命令行上重现在Visual Studio 2012中运行MsTest的行为.

我们的解决方案包含许多项目,这些项目构建到位于解决方案级别的相同bin文件夹(例如C:\ MySolution\bin) - 这是被测试代码(CUT).测试分组在一个单独的项目中,该项目驻留在自己的解决方案中,并构建在自己的bin文件夹中(例如C:\ MySolution\Tests\bin).实际上有很多插件,因此我们希望MsTest在运行将所有内容复制到TestResults文件夹的测试内容时引用CUT bin文件夹.我们在Visual Studio 2012中通过编辑.testrunco​​nfig并将".\ bin"指定为" 要加载的程序集的根文件夹 "(在编辑testrunco​​nfig时在"单元测试"选项卡中)来实现此目的.因此,我们可以在VS2012中加载测试解决方案并在那里运行测试,而无需将bin文件夹内容复制到TestResults目录.

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

MsTest /testcontainer:Tests\bin\Tests.dll

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

MsTest /runco​​nfig:LocalTestRun.testrunco​​nfig /testcontainer:Tests\bin\Tests.dll

它仍然没有用.它可以开始测试,但所有测试都失败了.我收到了很多类似的警告

警告:测试运行部署问题:未找到测试容器"C:\ MySolution\Tests\bin\tests.dll"直接或间接引用的程序集或模块"....".

最后它说:

已配置的应用程序基目录'C:\ MySolution\TestResults\User_Machine 2013-07-28 13_16_59\Out\bin'不存在.将改为使用测试目录.

当我applicationBaseDirectory将testrunco​​nfig中的选项更改为绝对路径(C:\ MySolution\bin)时,它工作正常.我仍然收到许多警告,例如:

警告:测试运行部署问题:未找到测试容器"C:\ MySolution\Tests\bin\tests.dll"直接或间接引用的程序集或模块"....".

但无论如何,指定绝对路径并不是一个真正可行的解决方案.如何在命令行上使用不同但相对的程序集基目录运行MsTest?

我的LocalTestRun.testrunco​​nfig如下:

<?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>
Run Code Online (Sandbox Code Playgroud)

And*_*eas 3

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

VSTest.Console.exe Tests\bin\Tests.dll /Framework:framework40 /Settings:LocalTestRun.testrunco​​nfig

这适用于相对路径为 的情况applicationBaseDirectory