2015-10-02 7 views
6

テーブルを通してSpecflowでnull値を入力するにはどうすればよいですか?specflowステップ定義テーブルにヌル値を入力する方法

のは、過度に単純化した例を見てみましょう:バッチ欄の

When a tire is attached to a car 
| CarId | TireModel  | FabricationDate | Batch | 
| 1  | Nokian Hakka R | 2015-09-1  |  | 

空の文字列がspecflowにより、そのような、空の文字列としてテキストとして解釈されます。その列をnullとしてマークする特別な構文はありますか?

答えて

7

拡張メソッドあなたのデフォルトのもの

public class StringValueRetriver : IValueRetriever 
{ 
    public bool CanRetrieve(KeyValuePair<string, string> keyValuePair, Type targetType, Type propertyType) 
    { 
     return propertyType == typeof(string); 
    } 

    public object Retrieve(KeyValuePair<string, string> keyValuePair, Type targetType, Type propertyType) 
    { 
     return string.IsNullOrEmpty(keyValuePair.Value) ? null : keyValuePair.Value; 
    } 
} 

あなたのシナリオでは、いくつかの場所では、これがUAT関連のテストであるならば、私は、ユーザーが一般的に現実世界でのNULLを使用することができるとは思わない、さらに、この考える

[BeforeScenario] 
    public void BeforeScenario() 
    { 
     var defaultStringValueRetriever = Service.Instance.ValueRetrievers.FirstOrDefault(vr => vr is TechTalk.SpecFlow.Assist.ValueRetrievers.StringValueRetriever); 
     if (defaultStringValueRetriever != null) 
     { 
      Service.Instance.UnregisterValueRetriever(defaultStringValueRetriever); 
      Service.Instance.RegisterValueRetriever(new StringValueRetriver()); 
     } 
2

私はnullのための特別な構文があるとは思わないし、私はあなた自身が変換を処理する必要があると思う。 value retrievers have been revised in the v2 branchであり、標準の文字列値検索エンジンの登録を解除し、特殊な構文を探してnullを返す独自の実装を登録することで、これを処理できます。

現在の1.9。*バージョンでは、空の文字列をチェックしてnullを返すだけで済みます。

1

私はこれを、単純な拡張方法を使用してケースバイケースで行うことを選択しました。私は、例えば、valueパラメータで渡され、()

使用例NullIfEmptyを呼び出して変換ハンドラで

AndICheckTheBatchNumber(string batch) { 
    batch = batch.NullIfEmpty(); 
    //use batch as null how you intended 
} 

あなたがあなた自身のIValueRetrieverを作成して置き換えることができます

using System; 

namespace Util.Extensions 
{ 
    public static class StringExtensions 
    {   
     public static string NullIfEmpty(this string str) 
     { 
      if (string.IsNullOrEmpty(str)) 
      { 
       return null; 
      } 
      return str; 
     } 
    } 
} 
+1

を繰り返します。 – kernowcode

関連する問題