3

ステップ引数変換を使用して文字列を別の文字列に変換できるかどうかを知りたいと思っていました。次に例を示します。

次のような手順があります。

When in element 'Element' I enter 'value'

これらのステップでは、数値や日付などのさまざまなデータを受け入れる必要があります。それらの定義は次のようになります。

    [When(@"in element '(.*)' I enter '(.*)'")]
    public void WhenIEnterInElement(string element, string value)
    {
        Enter(value, element);
    }

私はそれが次のようなものを受け入れることを望みます:

When in element "Element" I enter "today plus 3 days"

そして、次のようなステップ引数変換を使用します。

    [StepArgumentTransformation(@"today plus (\d+) days")]
    public string ConvertDate(int days)
    {
        return DateTime.Today.AddDays(days).ToString();
    }

文字列を srting に変換しようとしているために機能していません。ステップ引数変換でこれを行う方法はありませんか?

4

1 に答える 1

3

本当に必要なのは、文字列を再フォーマットして、単一のバインド方法に制限できるようにすることです。

しかし

次の変換は、SpecFlow によって実行できます (次の優先順位で)。
  • 引数がパラメータ タイプのインスタンスである場合 (たとえば、パラメータ タイプがオブジェクトまたは文字列の場合) は変換されません。
  • ステップ引数変換
  • 標準変換
  • ( https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversionsより)

    メソッドは文字列パラメータを取るため、stepargumenttransformations は使用されません

    2 つのオプションがあります

    1) データ型ごとに変換を使用し、型ごとにメソッド バインディングを使用する

    [When(@"in element '(.*)' I enter '(.*)'")]
    public void WhenIEnterInElement(string element, DateTime value)
    {
        Enter(value, element.ToString());
    }
    
    [StepArgumentTransformation(@"today plus (\d+) days")]
    public DateTime ConvertDate(int days)
    {
        return DateTime.Today.AddDays(days);
    }
    

    string2)解析されていないさまざまなデータでステップ バインディングを再利用できるようにするためのラップ

    public class WrappedString
    {
        public string Value;
        public WrappedString(string value):Value(value) {}
    }
    
    [When(@"in element '(.*)' I enter '(.*)'")]
    public void WhenIEnterInElement(string element, WrappedString value)
    {
        Enter(value, element.Value);
    }
    
    [StepArgumentTransformation(@"today plus (\d+) days")]
    public WrappedString ConvertDate(int days)
    {
        return new WrappedString(DateTime.Today.AddDays(days).ToString());
    }
    

    1) はおそらくよりクリーンですが、シナリオはテキストを操作できることに少し基づいているように思えます。その場合、(2) はその要件をモデル化するのにも役立ちます。

    于 2013-05-14T07:31:43.217 に答える