7

Web でかなりの調査を行い、いくつかの設定を試しましたが、コマンド ラインで Visual Studio 2012 で MsTest を実行したときの動作を再現できませんでした。

私たちのソリューションは、ソリューション レベル (例: C:\MySolution\bin) に存在する同じ bin フォルダーにビルドされる多くのプロジェクトで構成されています。これがテスト対象のコード (CUT) です。テストは、独自のソリューションに存在し、独自の bin フォルダー (例: C:\MySolution\Tests\bin) にビルドされる別のプロジェクトにグループ化されます。非常に多くのプラグインがあるため、テストを実行するときに、すべてを TestResults フォルダーにコピーするのではなく、MsTest が CUT bin フォルダーを参照するようにします。Visual Studio 2012 でこれを実現するには、.testrunco​​nfig を編集し、".\bin" を "ロードするアセンブリのルート フォルダー" として指定します (testrunco​​nfig の編集時に [ユニット テスト] タブで)。

ここで、VS2012 と同じ方法で MsTest を実行する .bat ファイルを作成して、テストを実行するためだけに 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' が存在しません。代わりに test ディレクトリが使用されます。

applicationBaseDirectorytestrunco​​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>
4

2 に答える 2

3

さらに検索した後、VS2012 に含まれているテスト コンソール ランナーを使用するように変更しました。

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

これは、相対パスで動作しapplicationBaseDirectoryます。

于 2013-07-29T16:03:16.567 に答える
1

これは、テスト プロジェクトの bin (または配置) フォルダーではなく、現在のディレクトリを独自の作業ディレクトリに設定する MSTest のバグによるものです。回避策は、テスト クラスのコンストラクターで次のコードを実行することです。

Environment.CurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

http://www.ademiller.com/blogs/tech/2008/01/gotchas-mstest-appdomain-changes-in-vs-2008/からアイデアを得ました。ただし、少なくとも私の場合、記事で提案されているように、その逆ではなく、Environment.CurrentDirectory を設定する必要があることに注意してください。

于 2015-07-03T14:53:04.010 に答える