Le definizioni di passi cetriolo in Java possono essere metodi statici o metodi di istanza?

2

Siamo nuovi nell'usare il cetriolo con selenio per scrivere suite di test automatizzate.

Il nostro approccio iniziale era quello di avere una classe java per file di funzionalità.

Ora abbiamo aggiunto i metodi di istanza in ogni classe per le definizioni di passi corrispondenti.

Ora, se abbiamo bisogno di riutilizzare una definizione di passo in qualche altro file di funzionalità, ci troviamo di fronte a problemi poiché non riusciamo a riutilizzare la stessa annotazione con lo stesso modello di espressioni regolari con nessun altro metodo di un'altra classe e non possiamo nemmeno usare la definizione del passo esistente che è in qualche altra classe.

Questi metodi condividono variabili di istanza come il riferimento al driver.

Ora riutilizzare un metodo di istanza come una definizione di passo è anche un problema perché questi metodi non sono riutilizzabili al di fuori della classe e non posso inserire tutte le definizioni di passaggi all'interno di una classe.

Ho esaminato alcuni esempi di rubini, ho scoperto che scrivono una sorta di blocchi che non hanno accesso allo stato condiviso. Eseguono solo i passaggi.

Quindi in Java dovrei sempre creare metodi statici che eseguiranno solo i passaggi uno per uno e non condivideranno lo stato?

    
posta Amogh Talpallikar 11.10.2013 - 07:34
fonte

3 risposte

1

La mia comprensione è che Cucumber in Java utilizza i file di passaggio POJO e ha la capacità di eseguire l'iniezione di dipendenza tramite varie estensioni di cetriolo - almeno, questo è quello che dice nel loro documentation .

In quanto tale, a meno che le tue specifiche siano molto semplici e rimarranno sempre così, vorrai davvero utilizzare istanze reali. Statico è contagioso: se fai i tuoi passi statici, devi rendere tutto il resto statico, e non è un buon posto dove stare.

Anche se non si utilizza la DI vera, l'ereditarietà può anche essere molto utile nei file di passaggio, e generalmente è un modo migliore di riutilizzare il codice rispetto a un pasticcio di statica. Se tutti i passaggi necessitano di fare riferimento al driver, quindi inserirlo nella classe base e, se si vuole essere veramente economici, utilizzare un costruttore senza parametri con il pattern Locator di servizio (che non è una pratica eccellente in generale ma molto comoda per test di comportamento).

Dici che sei preoccupato che il codice passo non sia riutilizzabile al di fuori della classe, ma non è che si suppone essere. I passaggi dovrebbero essere referenziati dalle specifiche stesse e dovrebbero (generalmente) non fare riferimento l'un l'altro. Se esistono funzionalità comuni a molti diversi passaggi o gruppi di funzioni, dovresti inserirle in un oggetto Page o in qualche tipo di aiuto. Questo è il motivo per cui la maggior parte delle implementazioni di Cucumber hanno il supporto DI; vogliono che tu scriva il tuo codice di prova con lo stesso livello di qualità del tuo codice di sistema, perché a quanto pare, probabilmente trascorrerai il 30-40% delle ore di sviluppo mantenendo i test automatici, quindi si applicano tutte le stesse pratiche migliori .

    
risposta data 07.01.2014 - 22:49
fonte
0

Ho riscontrato un problema simile con un driver Web Selenium condiviso. Configuro il driver come bean Spring con scope singleton (questo è l'ambito di default), quindi se hai bisogno di questo bean in molti posti basta accedervi come bean Spring.

    
risposta data 14.02.2014 - 16:48
fonte
-4

Definisci metodi statici solo nei seguenti scenari:

  1. Se stai scrivendo classi di utilità e non dovrebbero essere modificate.
  2. Se il metodo non utilizza alcuna variabile di istanza.
  3. Se qualsiasi operazione non dipende dalla creazione dell'istanza.
  4. Se esiste un codice che può essere facilmente condiviso da tutti i metodi di istanza, estrai tale codice in un metodo statico.
  5. Se sei sicuro che la definizione del metodo non verrà mai modificata o sovrascritta. Non è possibile sovrascrivere i metodi statici.
risposta data 07.01.2014 - 19:56
fonte

Leggi altre domande sui tag