2013-07-28 23 views
6

我在网上做了很多研究并尝试了一些设置,但我无法重现在命令行上运行Visual Studio 2012中的MsTest的行为。从命令行使用自定义程序集基目录运行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目录。

现在我想创建一个.bat文件,该文件将以与VS2012中相同的方式运行MsTest,以便我们可以省略仅用于运行测试的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 \测试\ BIN \ tests.dll'找不到。

和最终它表示:

配置的应用程序的基本目录C:\ MySolution \ TestResults \ User_Machine 2013年7月28日13_16_59 \缺货\ BIN'不存在。测试目录将被使用。

当我改变了选项applicationBaseDirectory在testrunco​​nfig 为绝对路径(C:\ MySolution \ BIN),它的工作。我仍然收到许多警告,例如:

警告:测试运行部署问题:测试容器'C'直接或间接引用的程序集或模块'....'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> 
+0

对于未来的读者,请查看我的答案在这里:http://stackoverflow.com/questions/5481120/mstest-cannot-find-the-assembly/36918484#36918484 – granadaCoder

回答

2

更多的搜索后,我们改为使用附带VS2012测试控制台亚军:

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

这适用于相对路径为applicationBaseDirectory

1

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

Environment.CurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 

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

+1

对于我在vs2013与.net4.5,以下工作:Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; – Kinetic