2017-11-09 1 views
1

Ich erzeuge Inhalt für eine Textdatei und versuche, die Ausgabe mit einer SpecFlow-Tabelle zu testen. Meine Then Anweisung sieht wie folgt aus:Wie konvertiert man SpecFlow-Tabelle in ein Array von Strings

Then the content should be 
| Line   | 
| This is Line 1 | 
| This is Line 2 | 
| etc...   | 

ich dies in ein Array von Zeichenfolgen in der Step-Datei wie folgt drehe:

[Then(@"the content should be")] 
public void ThenTheContentShouldBe(Table table) 
{ 
    string[] expectedLines = table.Rows.Select(x => x.Values.FirstOrDefault()).ToArray(); 
    ... 
} 

Das gibt mir ein Array von Strings mit 3 Elementen, Ignorieren der ersten "Zeile" als Tabellenkopf. Aber es fühlt sich ein bisschen peinlich an. Gibt es eine bessere Möglichkeit, dies in ein Array von string zu verwandeln? Bonuspunkte, wenn es auch in Arrays unveränderliche Typen wie int umwandeln usw.

+0

, was mit ihm los? –

+0

Hauptsächlich, wenn ich eine Klasse 'Foo' mit einer einzigen' String'-Eigenschaft namens 'Line' hätte, könnte ich einfach' table.CreateSet (); '. Ich hoffe, ich habe auf eine clevere Methode gehofft, die Erweiterungsmethode 'CreateSet' zu verwenden. – djs

+0

nicht 'table.CreateSet () .Wählen (f => f.Line). ToArray()' Arbeit? –

Antwort

2

könnten Sie Ihre eigene Erweiterung schreiben

public static class MyTableExtenstions 
    { 
     public static string[] AsStrings(this Table t, string column) 
     { 
      return t.Rows.Select(r => r[column]).ToArray(); 
     } 
    } 

dann

string[] expectedLines = table.AsStrings("Line"); 
-1

Sie diese Helfer verwenden können, müssen Sie Fügen Sie den TechTalk.SpecFlow.Assist Namespace an den Anfang Ihrer Datei. Nach dem Hinzufügen dieses Namensraums können Sie die Funktion CreateSet verwenden. CreateSet<T> ist eine Erweiterungsmethode aus der Tabelle, die die Tabellendaten in eine Gruppe von Objekten konvertiert. Zum Beispiel, wenn Sie den folgenden Schritt haben:

Given these products exist 
| Sku    | Name    | Price | 
| BOOK1   | Atlas Shrugged | 25.04 | 
| BOOK2   | The Fountainhead | 20.15 | 

Sie können die Daten in der Tabelle auf einen Satz von Objekten, wie so konvertieren:

[Given(@"Given these products exist")] 
public void x(Table table) 
{ 
    var products = table.CreateSet<Product>(); 
    // ... 
} 

Die CreateSet Methode wird eine IEnumerable auf der Grundlage des Daten, die in der Tabelle übereinstimmen. Es füllt die Werte für jedes Objekt und führt die entsprechenden Konvertierungen von der Zeichenfolge zur verknüpften Eigenschaft durch.

Bitte lesen Sie mehr über here Helfer

Nach Ihrem Beispiel wäre es,

[Given(@".....")] 
public void x(Table table) 
{ 
    var result = table.CreateSet<string>(); 
    // ... 
} 
+0

Leider funktioniert das nicht wie erwartet; Ein 'IEnumerable' von leeren Strings wird zurückgegeben. –

Verwandte Themen