4

I have a VS2010 unit test project set to using SpecFlow 1.8.1 and mstest. In order to get the SpecFlow unit tests working, I've done the following:-

  1. I added the references to the following files in my project:-

    Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
    TechTalk.SpecFlow.dll

    Note that the TechTalk.SpecFlow.dll has been added into my project and the reference points to that file.

  2. I've set the "Copy Local" property of the TechTalk.SpecFlow.dll reference to True.

  3. I've also added an App.Config that specifies "MsTest.2010" as the provider, and regenerated all code-behinds for the SpecFlow features.

すべてが私の VS2010 で動作し、テストは SpecFlow テストランナーと mstest テスト ランナーの両方で正常に実行されます。しかし、(.vsmdi テスト リスト ファイルを使用して) TFS 2008 で mstests を実行しようとすると、次の例外で失敗しました:-

Class Initialization method MyNamespace.MyTestFeature.FeatureSetup threw exception.
System.Configuration.ConfigurationErrorsException:
System.Configuration.ConfigurationErrorsException: An error occurred creating the
configuration section handler for specFlow: Could not load file or assembly
'TechTalk.SpecFlow' or one of its dependencies. The system cannot find the file
specified. (D:\Projects\TestProject\TestResults\administrator_MYPC 2012-06-27
18_30_05_Any CPU_Debug\Out\TestProject.DLL.config line 4) --->
System.IO.FileNotFoundException: Could not load file or assembly 'TechTalk.SpecFlow'
or one of its dependencies. The system cannot find the file specified.

TFS はプロジェクトを正常にビルドし、同じプロジェクトで他の単体テスト (SpecFlow ではなく通常の mstest) を問題なく実行することに注意してください。SpecFlow テストの実行でのみ失敗しました。

それで、私は何を間違っていますか?

編集:私の App.Config ファイルの内容は次のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section
       name="specFlow"
       type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
  </configSections>
  <specFlow>
    <unitTestProvider name="MsTest.2010" />

    <runtime detectAmbiguousMatches="true"
         stopAtFirstError="false"
         missingOrPendingStepsOutcome="Inconclusive" />

    <trace traceSuccessfulSteps="true"
           traceTimings="false"
           minTracedDuration="0:0:0.1" />
  </specFlow>
</configuration>
4

5 に答える 5

2

このサイトこのサイトの指示に従ってください:

コマンド Tools > Library Package Manager > Package Manager Console を使用すると、入力できますPM> Install-Package SpecFlow

プロンプトが「正常にインストールされました」を返すと、SpecFlow アセンブリがプロジェクトの参照に表示されるようになりました。そして、MSTest プロジェクトは正常にコンパイルされるようになりました (少なくとも私にとっては)。

于 2013-02-19T14:35:30.177 に答える
1

このエラーも発生しました。私の場合、問題は、\...\bin\Debug||Release\ フォルダーではなく、\...\obj\Debug||Release\ フォルダーをターゲットとして使用していたことです。これらのフォルダーを調べると、TechTalk.dll アセンブリが前者から欠落していることがわかりました。.bat ファイルを切り替えるだけで、問題は修正されました。

于 2013-05-07T12:41:13.003 に答える
1

VS2013 が SpecRun dll をプロジェクト フォルダーではなく、C:\Users\**YOUR_USER**\AppData\Local\Temp\VisualStudioTestExplorerExtensions\SpecRun.Runner.1.3.0\tools. したがって、必要な SpecFlow ライブラリをすべて therel に配置するだけです。

于 2016-03-15T09:05:01.257 に答える
0

それを機能させるために私が見つけた 1 つのハックは、プロジェクトで作成したすべての単一の SpecFlow 機能に別のクラスを追加することです。クラスは次のようになります。

[DeploymentItem(@"TechTalk.SpecFlow.dll")]
partial class MyTestFeature { }

// The above class-name needs to come from the auto-generated code behind
// (.feature.cs) for each SpecFlow feature.

これは非常に厄介なハックだと思いますが、うまくいかなかった理由の手がかりを提供してくれます。誰かがよりエレガントな解決策を考え出すとよいでしょう。

于 2012-06-27T08:50:33.203 に答える
0

私は最終的に、この問題に対するより適切な修正を見つけました。ビルド出力から .config ファイルを削除するには、ビルド後のイベントを追加するだけです。(App.config ファイルは、設計時に分離コードを生成するためにのみ使用されます。実行時にはまったく使用されないため、削除できます。)

ビルド後のイベントのコマンドは次のようになります。

del /f /q "$(TargetDir)$(TargetFileName).config"

修正: .config ファイルは決定的な結果を生成するために使用されるため、より良いビルド後のイベント コマンドは次のとおりです。

if "$(IsDesktopBuild)"=="false" del /f /q "$(TargetDir)$(TargetFileName).config"
于 2012-06-28T01:17:22.220 に答える