2016-08-25 3 views
2

Ich habe ein wenig gesucht, kann aber kein genaues Beispiel finden. Ich habe ein Formular, das ich als Schritt ausfüllen kann. Die Formularfelder in etwa so aussehen:Wie erstellt man eine Schrittdefinition für die dynamische Dateneingabe?

Datum:
Währung:
Gesamt:
Beschreibung:

Aber nicht alle Felder sind erforderlich, Daten vom Benutzer eingegeben hat. Anstelle von mehreren Methoden zu schreiben für die verschiedenen Kombinationen zu berücksichtigen, etwa so:

(When I enter the 'Date' and 'Currency' and 'Total' and 'Description') 
(When I enter the 'Date' and 'Total') 
(When I enter the 'Currency' and 'Description') 
etc... 

Ich mag würde irgendwie so etwas wie dies umzusetzen, sondern in der Feature-Datei:

When I enter the following details: 
    |Date  |x |  
    |Currency |USD | 
    |Total  |100 | 
    |Description |Test | 

Und dann haben eine einzelne Methode, um jede Kombination von Daten zu handhaben, die der Benutzer in diese zweite Spalte eingibt.

Ich habe Websites gefunden, die diese Daten tabellengesteuerte Beispiel haben:

When I enter the following details: 
    |Date  |<date>  |  
    |Currency |<currency> | 
    |Total  |<total>  | 
    |Description |<description> | 

Example data: 
    |date |currency |total |description | 
    |x |USD  |100 |foo   | 
    |y |EUR  |200 |test  | 
    |z |HKD  |124 |bar   | 

Aber das ist nicht das, was ich bin nach. Ich muss nicht durch eine Liste von vorbestimmten Beispieldaten iterieren. Ich hoffe, ich habe das Problem klar genug zusammengefasst und jemand kennt einen guten Ort, um ein Beispiel für diese Art der Umsetzung zu finden. Danke für jeden Hinweis!

+0

Es könnte nur ich sein, aber Ihr Ziel scheint mir nicht sehr klar .. Sie möchten verschiedene Eingaben als Tests versuchen, aber Sie möchten nicht die Datentabelle verwenden? Warum? Genau darum geht es. Könnten Sie ein wenig mehr darüber erzählen, warum Sie diesen Ansatz vermeiden wollen? – px06

+0

Ich brauche nicht über Werte für einen einzelnen Test zu iterieren. Ist das nicht die Datentabelle? Downstream nimmt unsere Anwendung verschiedene Funktionen und Benutzeroberflächenpfade an, basierend auf dem, was der Benutzer in den Feldern eingegeben hat. In einigen dieser Szenarien füllen sie nicht alle Felder aus. Dieser Schritt ist nur ein 'Zubringer' in die nachfolgenden Schritte basierend auf dem, was der Benutzer eingegeben hat. Tut mir leid, wenn das nicht klar ist ... es ist schwer zu erklären, was ich tun möchte, ohne es zu zeichnen. – gppanter

+0

selbst wenn dies der Fall ist, können Sie die 'Szenario-Gliederung' verwenden, wie in der folgenden Antwort erwähnt, die auch eine Tabelle erstellt. Aber damit können Sie auch die möglichen Ergebnisse auflisten, die ein 'When'-Schritt als Testvariable erzeugen kann. Wenn ich richtig verstehe, möchten Sie eine Reihe von Eingängen und entsprechenden Ausgängen testen. – px06

Antwort

1

Ja, Sie können eine Datentabelle als Argument für einen einzelnen, nicht wiederholten Schritt verwenden. Die erste Zeile der Datentabelle muss ein Header sein:

When I enter the following details: 
    |Name  |Value| 
    |Date  |x | 
    |Currency |USD | 
    |Total  |100 | 
    |Description |Test | 

Hier ist eine mögliche Art und Weise in einem Schritt zu verwenden:

@Given("^I enter the following details:$") 
public void i_enter_the_following_details(Map<String, String> details) throws Throwable { 
    for Map.Entry<String, String> entry : details.entrySet() { 
     String key = entry.getKey(); 
     String value = entry.getValue(); 
     switch (key) { 
      case "Date": 
       // add the date to the form 
       break; 
      // ... 
     } 
    } 
} 

Sie auch die Tabelle als DataTable bekommen kann, ein List von Wertobjekte, ein List<List<String>> oder List<Map<String>> durch Deklarieren des Parameters mit diesem Typ. Map<String, String> scheint hier am einfachsten.

Ich schrieb das Beispiel auf diese Weise, weil ich annehme, dass Sie unterschiedlichen Code schreiben müssen, um jeden Wert in sein Feld zu setzen.Wenn der Code für jedes Feld gleich ist, können Sie einfach den CSS-Selektor des Feldes in die Datentabelle einfügen und den Schalter loswerden. Weitere Beispiele sind here und here.

+0

Nur eine kurze Frage dazu. Wenn ein Benutzer beispielsweise kein Datum eingibt, wird der Datumscode trotzdem ausgeführt? Das Problem, das ich habe, ist, dass ich brauche, dass der Code nur ausgeführt wird, wenn die Felddaten tatsächlich eingegeben werden, und ignoriert wird, wenn dies nicht der Fall ist. Ich nehme an, ich könnte das vielleicht mit ein paar kreativen "Wenn/Dann" -Aussagen machen, aber wenn ich das nicht brauche, ist das sogar noch besser. – gppanter

+0

Oh, ich habe vergessen, optionale Felder zu behandeln. Überarbeitet. Beachten Sie auch, dass eine Kopfzeile vorhanden ist. –

+0

Ah, das könnte genau das sein, wonach ich bin. Thx, ich werde dies eine Chance geben und Bericht erstatten! – gppanter

0

Was ich verstehen konnte ist, dass Sie versuchen, Kombinationstests dieser 4 Felder im Formular durchzuführen. Wenn dies der Fall ist, müssen Sie sich die Option ScenaOutline ansehen, auf die Sie in Datentabellen verweisen. Auf diese Weise können Sie alle Ihre Kombinationen als Beispiel angeben. Jedes Beispiel wird abgeholt und als separates Szenario ausgeführt. Sie können Ihre Wann folgendermaßen aussehen ändern -

Scenaio Outline: 
... 
... 
When I enter the following details : Date <date> Currency <currency>....... 
... 
... 
Examples: 
    |date |currency |total |description | 
    |x |USD  |100 |foo   | 
    |y |EUR  |200 |test  | 
    |z |HKD  |124 |bar   | 

Wenn Sie irgendwelche Daten in der Tabelle Beispiele leer, leer lassen wird dem Wenn der Schritt gesendet.

ODER - Wenn Sie die Daten aus dem Whenstep in einer Liste von Objekten erhalten möchten, deren Instanzvariable dem Datum, der Währung usw. entspricht, können Sie den Parameter List in Ihrer Schrittdefinition verwenden. Dies erspart Ihnen das Schreiben von Musterausdrücken. Dann wird Ihr Schritt

Stellen Sie sicher, dass Instanzvariablennamen den Tabellenüberschriften in dem Objekt entsprechen, das Sie erstellen.

Verwandte Themen