2015-10-02 3 views
6

Wie kann ich einen Nullwert in Specflow über eine Tabelle eingeben?Wie Null-Wert in specflow Schrittdefinitionstabelle eingeben

Blick Lassen Sie sich bei einem allzu simplen Beispiel:

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

Die leere Zeichenfolge in der Batch-Spalte als Text von specflow und als solche leeren Zeichenkette interpretiert. Gibt es eine spezielle Syntax, um diese Spalte als null zu markieren?

Antwort

7

Sie Ihre eigene IValueRetriever erstellen und ersetzen Standard eins mit Ihrem

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; 
    } 
} 

Einige wo in Ihrem Szenario Schritte

[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

Ich glaube nicht, dass es eine spezielle Syntax für null gibt, und ich denke, dass Sie die Konvertierung selbst übernehmen müssen. Die value retrievers have been revised in the v2 branch und Sie können dies möglicherweise umgehen, indem Sie den Standard-String-Wert-Retriever abmelden und Ihre eigene Implementierung registrieren, die nach einer speziellen Syntax sucht und null zurückgibt.

In der aktuellen 1.9. * Version denke ich, dass Sie nur nach leeren String suchen und Null selbst zurückgeben müssen.

1

Ich habe gerade ausgewählt, dies auf einer Fall-für-Fall-Weise mit einer einfachen Erweiterungsmethode zu tun.

in dem Handler ich das übergebene Beispiel Wertparameter umwandeln und rufen NullIfEmpty()

Anwendungsbeispiel

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

Erweiterungsmethode

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

über das Denken weiter, wenn diese Prüfung UAT Zusammenhang ist dann glaube ich nicht Nutzer in der Regel Nulls in der realen Welt nutzen können. – kernowcode