0

初心者向け: 私は Visual Studio と SpecFlow 全般に不慣れです。

SpecFlow の入門ドキュメントに従うと、開始するプロジェクトのタイプに応じて 2 つの異なる結果が得られます。

単体テスト プロジェクト: このタイプのプロジェクトでは、テストはランナーによってまったく認識されません。「SpecRun 評価」テストのみが実行されます。

MSTest テスト プロジェクト (.NET Core): このタイプのプロジェクトでは、テストは常に成功していますが、テスト出力でエラーが発生します:「値を null にすることはできません。パラメーター名: メッセージ」であり、これは「ジェネレーター」が原因です。

これはすべて、典型的な Windows 10 Pro で行っています。VS 2017 と 2019 の両方で試しました。何かを見逃した場合に備えて、プロセス全体をやり直そうとしました。パッケージの更新も試みました。注意すべき点として、単体テスト プロジェクトは App.config ファイルを生成しません。

using System;
using TechTalk.SpecFlow;

namespace Tests.Steps
{
    [Binding]
    public class CalculatorSteps
    {
        [Given(@"I have entered (.*) into the calculator")]
        public void GivenIHaveEnteredIntoTheCalculator(int p0)
        {
            Console.WriteLine(p0);
        }

        [Given(@"I have also entered (.*) into the calculator")]
        public void GivenIHaveAlsoEnteredIntoTheCalculator(int p0)
        {
            Console.WriteLine(p0);
        }

        [When(@"I press add")]
        public void WhenIPressAdd()
        {
            Console.WriteLine("add pressed");
        }


        [Then(@"the result should be (.*) on the screen")]
        public void ThenTheResultShouldBeOnTheScreen(int p0)
        {
            Console.WriteLine(p0);
        }

    }
}

テストで意図的に例外をスローしたときに、テストが実行され、何らかのフィードバックが得られることを期待しています。

これはすべて、求人応募のためのタスクにすぎませんが、両方の状況で結果が生じるため、ここで提供したのは、生成されるデフォルトの機能ファイルです。私はすでにタスクを完了する方法を知っていますが、ここで何時間もセットアップに行き詰まっています...それが私の愚かさ/経験不足であることを本当に願っています.

.csproj: https://codeshare.io/5zxk0W

4

1 に答える 1

3

この回答は SpecFlow 2.* 用です。SpecFlow 3 では、SpecFlow.Tools.MSBuild.GenerationNuGet パッケージをプロジェクトに追加するだけです。

MSBuild 統合を有効にする手順が 1 つありませんでした。

タグの csproj の最後に次のコードを配置する必要があります。

<Target Name="AfterUpdateFeatureFilesInProject">
    <ItemGroup>
    <Compile Include="**\*.feature.cs" Exclude="@(Compile)" />
    </ItemGroup>
</Target>

https://specflow.org/2019/generating-code-behind-files-using-msbuild/ - MSBuild コード ビハインド ジェネレーション クラシック プロジェクト システムの有効化 - ステップ 2で説明されています。

于 2019-04-04T09:14:55.040 に答える