top 15 popular specflow interview questions
Domande e risposte all'intervista Specflow più frequenti:
Il nostro precedente tutorial su Specflow è stato riassunto Come generare rapporti di prova ed eseguire test selettivi .
In questo tutorial, daremo uno sguardo alle domande di intervista Specflow più popolari insieme alle loro risposte.
Leggi il file Serie completa di formazione Specflow per una facile comprensione del concetto. Specflow è uno strumento che supporta le pratiche BDD nel framework .NET. È un framework open source ospitato su GitHub. Aiuta nell'utilizzo di ATDD (Acceptance Test Driver Development) per .NET.
Principali domande e risposte dell'intervista a Specflow
Di seguito sono elencate le domande di intervista Specflow più popolari con risposte ed esempi per una facile comprensione.
Q # 1) Qual è la differenza tra il file delle caratteristiche e i file di associazione?
Risposta: La scrittura di test BDD in Specflow ha 2 componenti principali, vale a dire
- File di funzionalità: Che contengono i test scritti come Scenarios in Domain Specific Language (DSL) e sono essenzialmente semplici file in inglese adatti e comprensibili per tutti gli stakeholder del progetto. In realtà, sono i file di test effettivi e vengono interpretati attraverso le associazioni o le definizioni dei passaggi.
- Associazioni passo: Questi file di codice sono l'effettiva logica di intelligenza alla base dell'esecuzione dei test. Ogni passaggio in uno scenario (che è una parte del file di funzionalità) si lega a un file di definizione del passaggio che viene effettivamente eseguito quando viene eseguito il test.
Quindi, una combinazione di entrambi i file Feature e la definizione o le associazioni di Step consente a Specflow (o qualsiasi altro BDD) di eseguire i test.
D # 2) Cos'è BDD e in cosa differisce da TDD o ATDD?
Risposta: Tutti questi tre termini, ovvero BDD, TDD e ATDD, sono in qualche modo correlati allo sviluppo guidato dai test in generale, ma sono effettivamente diversi in molti modi
- TDD: TDD fondamentalmente sta creando test dal punto di vista di uno sviluppatore. In parole semplici, è una serie di test che uno sviluppatore scrive per far passare (o fallire) il suo codice. È essenzialmente una tecnica per far fallire il codice finché non vengono risolti tutti i requisiti specifici. Fondamentalmente segue un ciclo di refactoring per il codice finché i test non sono tutti verdi.
- BDD: BDD è strettamente correlato al TDD ma è più rilevante da una prospettiva 'fuori dentro', il che significa che i test BDD sono più legati ai requisiti di business / prodotto e definiscono il comportamento desiderato del sistema sotto forma di Scenari. Il TDD, al contrario, si occupa di test unitari più granulari. Inoltre, le specifiche BDD sono generalmente testo in inglese semplice che è facile da capire e consente una maggiore collaborazione tra tutte le parti interessate del progetto.
- ATDD: L'obiettivo dello sviluppo basato sul test di accettazione è più dal punto di vista dell'accettazione dell'utente. Questi test definiscono anche il comportamento del cliente, ma dal punto di vista dell'integrazione o del prodotto finale in cui il caso d'uso finale di un cliente viene convertito in uno scenario di test e tutto il lavoro di sviluppo è focalizzato per soddisfare questi requisiti.
D # 3) Cosa è contenuto nel file generato automaticamente per la funzione Specflow?
Risposta: I file code-behind di Specflow sono file generati automaticamente con estensione '.cs'. Questi file hanno la logica di associazione da Steps alla definizione Step effettiva.
Alcuni punti riguardanti i file generati automaticamente sono:
- Questi file non devono essere modificati o modificati manualmente. Anche se provi a farlo, le modifiche non vengono salvate.
- Dopo ogni modifica nel file di funzionalità, il compilatore rigenera questo file per acquisire gli aggiornamenti.
D # 4) In che modo si accede ai collegamenti dei passaggi su diversi file di origine?
Risposta: I file di associazione a fasi possono essere riutilizzati anche se esistono in file di origine separati e la corrispondenza dell'associazione avviene tramite un'espressione regolare.
I file dei collegamenti dei passaggi sono essenzialmente classi parziali attribuite da (Rilegatura) attributo. Ciò garantisce che tutti i collegamenti dei passaggi siano disponibili a livello globale e possano essere utilizzati con i passaggi dello scenario in file di funzionalità diversi o uguali.
D # 5) Come possono essere risolte le implementazioni ambigue di step binding?
Risposta: Specflow fornisce un meccanismo per evitare l'implementazione ambigua di Step binding utilizzando un concetto chiamato Associazioni con ambito.
Ciò è utile negli scenari in cui sono presenti passaggi simili in Scenari in file di funzionalità uguali o diversi e se si desidera trattare entrambi i passaggi in modo diverso.
In uno scenario normale, poiché tutta la corrispondenza dei passaggi avviene tramite Regex, ed è una corrispondenza avida, dovrai assicurarti di scrivere un testo leggermente diverso (in modo che non corrispondano alla stessa implementazione) per i passaggi anche se hanno un impatto leggibilità.
Utilizzando le associazioni con ambito, è possibile specificare i tag con una particolare implementazione di associazione o l'intero file di associazione e assicurarsi che la corrispondenza abbia anche un filtro di categoria aggiuntivo.
Di seguito sono elencati i passaggi da seguire:
per) Contrassegna lo scenario con una categoria utilizzando la sintassi - @Etichetta. Esempio: Stiamo taggando lo scenario seguente con il tag - @scopedBinding
@scopedBinding Scenario: Youtube should search for the given keyword and should navigate to search results page Given I have navigated to youtube website And I have entered India as search keyword When I press the search button Then I should be navigate to search results page
b) Ora usa lo stesso tag sull'associazione del passaggio che assicurerà che oltre alla corrispondenza dell'espressione regolare, venga eseguita anche la corrispondenza del tag o della categoria (e assicurerà che altri passaggi non corrispondano a questa implementazione anche se la corrispondenza dell'espressione regolare ha esito positivo)
Nell'esempio precedente, vogliamo definire l'ambito dell'associazione per il passaggio. ' E ho inserito l'India come parola chiave di ricerca ', Aggiungeremo l'attributo Scope con il parametro Scoping come tag.
(Given(@'I have entered (.*) as search keyword'), Scope(Tag ='scopedBinding')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { // step binding implementation }
Simile alla definizione dell'ambito con tag, è anche possibile avere associazioni con ambito con titoli di funzionalità e scenari.
D # 6) Come può essere archiviato il contesto di test durante l'esecuzione di diversi scenari?
Risposta: Il contesto del test può essere archiviato utilizzando approcci diversi durante l'esecuzione di test specflow e ogni approccio ha i suoi pro e contro.
- Utilizzo di ScenarioContext e FeatureContext: Pensa a FeatureContext e ScenarioContext come un dizionario globale di coppie chiave-valore ed è accessibile rispettivamente durante l'esecuzione della funzionalità e l'esecuzione dello scenario. Il campo del valore può memorizzare qualsiasi tipo di oggetto e durante il recupero, deve essere lanciato nell'oggetto come desiderato.
- Utilizzo dei campi nei file di associazione: Questo approccio consente di condividere il contesto tra le implementazioni di binding nello stesso e / o in diversi file di binding nello stesso spazio dei nomi. Non è diverso nel mantenere lo stato utilizzando le variabili di classe e può essere impostato o recuperato attraverso le implementazioni di associazione come richiesto.
- Utilizzando il framework DI di Specflow: Specflow fornisce un framework di iniezione del contesto e può essere utilizzato per passare il contesto sotto forma di classi / oggetti Simple POCO. Gli oggetti / classi di contesto possono essere iniettati attraverso i campi del costruttore e possono essere passati lungo diversi file di binding Step.
Vedere un esempio di seguito con 2 oggetti iniettati tramite iniezione del costruttore.
(Binding) public class StepImplementationClass { private readonly Context1 _context1; private readonly Context2 _context2; public YoutubeSearchFeatureSteps(Context1 context1, Context2 context2) { _context1 = context1; _context2 = context2; } }
D # 7) Quali sono i limiti di Specflow o BDD in generale?
Risposta: BDD, come suggerisce il nome stesso, definisce il comportamento con l'applicazione che essenzialmente converte i casi d'uso in scenari di test.
Quindi l'assenza di stakeholder come un'azienda, prodotto e / o clienti potrebbe avere un impatto sulle specifiche effettive per le quali gli sviluppatori implementeranno test di scrittura e quindi potrebbe comportare la mancata fornitura del valore effettivo di ciò che avrebbe potuto fornire e di avere tutti gli stakeholder erano disponibili durante la definizione degli scenari.
Detto questo, la maggior parte delle volte i pro superano in astuzia i contro di BDD ed è davvero una tecnica molto utile per testare / convalidare le specifiche. Poiché è più o meno indipendente dalla lingua poiché sono disponibili framework BDD per quasi tutti i principali linguaggi di programmazione come Cucumber per Java, RSpec per Ruby e Specflow per .NET.
D # 8) Cosa sono le trasformazioni di argomenti a fasi?
Risposta: Le trasformazioni degli argomenti, come suggerisce il nome, non sono altro che trasformare il passaggio dello scenario.
Consideralo come un ulteriore livello di corrispondenza che si verifica prima che si verifichi l'effettiva corrispondenza di associazione dei passaggi e può essere utile per trasformare un diverso tipo di input utente piuttosto che avere diverse implementazioni di singoli passaggi per lo stesso tipo di input.
Per qualsiasi passaggio di trasformazione, l'attributo richiesto è StepArgumentTransformation
Ad esempio, fare riferimento al codice di esempio di seguito:
Given I have entered 50 days into the timestamp to minute converter Given I have entered 1 day, 2 hours, 3 minutes into the timestamp to minute converter Given I have entered 1 day, 1 hour, 1 minute, 30 seconds into the timestamp to minute converter
Facendo riferimento all'esempio di codice precedente, tutti e tre i passaggi sono correlati. Ma, se fosse stato attraverso la solita corrispondenza regex, sarebbe stato richiesto di scrivere tre diverse implementazioni di passaggi.
Con le trasformazioni degli argomenti Step in atto, è possibile trasformare i valori e creare un file TimeStamp oggetto dai parametri specificati e tornare all'implementazione del passaggio originale.
Diamo un'occhiata all'implementazione della trasformazione.
(StepArgumentTransformation(@'(?:(d*) day(?:s)?(?:, )?)?(?:(d*) hour(?:s)?(?:, )?)?(?:(d*) minute(?:s)?(?:, )?)?(?:(d*) second(?:s)?(?:, )?)?')) public TimeSpan convertToTimeSpan(String days, String hours, String minutes, String seconds) { // timestamp conversion logic }
Pertanto, qui stiamo trasformando l'input dello scenario in un valore intermedio (come TimeStamp) e restituiamo il valore trasformato all'attuale implementazione dell'associazione come mostrato nell'esempio seguente.
(Given(@'I have entered (.*) into the timestamp to minute converter')) public void GivenIHaveEnteredDaysIntoTheTimestampToMinuteConverter(TimeSpan tsTransformed) { // binding implementation }
Si noti come il valore trasformato di tipo TimeSpan viene ora restituito al metodo di implementazione dell'associazione Step effettivo.
Q # 9) Quali sono i diversi tipi di hook forniti da Specflow?
Risposta:
Specflow fornisce molti Hook personalizzati o eventi speciali con cui i gestori di eventi (essenzialmente metodi / funzioni) possono essere associati per eseguire alcune logiche di configurazione / smontaggio.
Specflow fornisce i seguenti hook:
- BeforeFeature / AfterFeature: L'evento generato prima e dopo che la funzione inizia e completa l'esecuzione rispettivamente.
- BeforeScenario / AfterScenario: L'evento generato prima e dopo l'esecuzione di uno scenario inizia e si completa rispettivamente.
- BeforeScenarioBlock / AfterScenarioBlock: L'evento generato prima e dopo un blocco dello scenario, ovvero quando uno qualsiasi dei blocchi dello scenario appartenenti a 'Dato', 'Quando' o 'Allora' inizia o si completa.
- BeforeStep / AfterStep: L'evento generato prima e dopo ogni fase dello scenario.
- BeforeTestRun / AfterTestRun: Questo evento viene generato solo una volta durante l'intera esecuzione del test e una volta al termine dell'esecuzione del test.
È importante notare qui che questi eventi vengono generati per impostazione predefinita e vengono gestiti se e solo se ci sono associazioni fornite per questi hook. Inoltre, non è obbligatorio implementare questi hook in coppia e ogni hook può esistere indipendentemente l'uno dall'altro.
D # 10) In che modo ScenarioContext è diverso da FeatureContext?
Risposta: Sia ScenarioContext che FeatureContext sono classi statiche fornite dal framework Specflow e sono davvero utili per eseguire attività come il passaggio di informazioni tra le associazioni, ottenere informazioni importanti come il contesto di esecuzione della funzionalità / scenario, ecc.
Vediamo come differiscono entrambi:
Come suggerisce il nome, ScenarioContext fornisce dati o informazioni a livello di esecuzione dello scenario mentre FeatureContext si occupa di cose a livello di funzionalità.
In termini semplicistici, tutto ciò che è archiviato in featureContext sarà disponibile per tutti gli scenari presenti in quel file di funzionalità mentre ScenarioContext sarà disponibile solo per le associazioni fino a quando non è in corso l'esecuzione dello scenario temporale.
Q # 11) Quanto è importante l'ordine di dato, quando e poi?
Risposta: Specflow non impone alcuna restrizione sull'ordine di Dato, quando e poi . Riguarda più la sequenza logica di uno scenario di test e qualsiasi pratica di test in generale, ad esempio come nei test unitari di solito seguiamo tre A che stanno per ' Organizzare, agire e affermare '.
Quindi, per gli scenari specflow, non vi è alcuna restrizione all'ordinamento e non impone inoltre che tutte e tre le sezioni siano presenti.
Spesso, a volte, la configurazione può essere minimalista e potrebbe non essere nemmeno necessaria. Quindi, per questi scenari, puoi semplicemente saltare il ' Dato 'Blocca e avvia lo scenario con' quando 'Blocco.
D # 12) Cosa sono ScenarioInfo e FeatureInfo?
Risposta: SpecflowContext e FeatureContext forniscono inoltre classi statiche annidate, ovvero ScenarioInfo e FeatureInfo.
ScenarioInfo consente di accedere alle informazioni sullo scenario attualmente in esecuzione.
Di seguito vengono fornite alcune delle cose che puoi imparare con questo corso:
- Titolo: Il titolo dello scenario. Sintassi: ScenarioContext.Current.ScenarioInfo.Title
- Tag: Elenco di tag sotto forma di Corda(). Sintassi: ScenarioContext.Current.ScenarioInfo.Tags
S simile a ScenarioInfo, FeatureInfo fornisce anche informazioni relative alla funzionalità corrente attualmente in esecuzione.
Oltre al titolo e ai tag, fornisce anche altre cose utili come qual è la lingua di destinazione per la quale il codice sottostante del file genera codice, i dettagli della lingua in cui è scritto il file di funzionalità, ecc.
La sintassi per ottenere i valori per FeatureInfo rimane la stessa di ScenarioInfo come di seguito:
FeatureContext.Current.FeatureInfo
D # 13) Differenza tra la struttura dello scenario e le tabelle Specflow.
Risposta:
ScenarioOutline è fondamentalmente un modo per eseguire scenari basati sui dati utilizzando Specflow in cui viene fornito un elenco di input in Esempi sezione dello scenario e lo scenario viene eseguito una volta ciascuno a seconda del numero di esempi forniti.
Vedere un esempio di codice di seguito per comprenderlo più chiaramente.
Scenario Outline: Youtube keyword search And I have entered as search keyword When I press the search button Then I should be navigate to search results page Examples: | searchTerm | | India | | America
Le tabelle sono solo mezzi per fornire dati tabulari con qualsiasi passaggio dello scenario e vengono passati come argomento della tabella Specflow nell'implementazione del passaggio che può essere successivamente analizzato al tipo di oggetto desiderato come richiesto.
Fare riferimento alla sezione 'grassetto' nell'esempio di codice di seguito per ulteriori dettagli:
Scenario: Pass data through Specflow tables for StudentInfo object Given I have entered following info for Student | FirstName | LastName | Age | YearOfBirth | | test | student | 20 | 1995 | When I press add Then i student should get added to database and entered info should be displayed on the screen
Simile all'attributo Tags: puoi usare qualsiasi informazione fornita da ScenarioInfo per controllare il flusso di esecuzione di qualsiasi implementazione del passaggio.
Q # 14) Controllo del test in esecuzione tramite ScenarioInfo.
Analogamente alle associazioni di ambito, che possono consentire l'aggiunta di un criterio di filtro aggiuntivo durante la corrispondenza della definizione del passaggio tramite i tag, è anche possibile sfruttare il controllo dell'esecuzione del test tramite le informazioni fornite con ScenarioInfo.
applicazioni per scaricare video da youtube
Per esempio, Hai 2 scenari con tag, ad esempio @ tag1 e @ tag2 ed entrambi contengono la stessa definizione di passaggio. Ora è necessario aggiungere una logica personalizzata a seconda dei tag dello scenario.
Pertanto, nell'implementazione della definizione del passaggio, è possibile ottenere semplicemente tutti i tag associati a uno scenario utilizzando ScenarioContext.Current.ScenarioInfo.Tags e controlla la presenza di un tag nello scenario in esecuzione e decidi quale codice vuoi eseguire.
Fare riferimento al codice di esempio riportato di seguito per una migliore comprensione:
(When(@'I press add')) public void WhenIPressAdd() { String() tags = ScenarioContext.Current.ScenarioInfo.Tags; String expectedTag = 'tag1'; if(tags.Any(s => s == expectedTag)) { // do something } else { // do something else } }
Simile all'attributo Tags: puoi usare qualsiasi informazione fornita da ScenarioInfo per controllare il flusso di esecuzione di qualsiasi implementazione del passaggio.
D # 15) Come possono essere eseguiti i test Specflow in un tipo di configurazione di integrazione continua?
Risposta:
Con le moderne metodologie di sviluppo software, l'integrazione continua è una sorta di parola d'ordine ed è generalmente indicata come un insieme di pratiche, in cui ogni impegno sul codice sorgente è considerato un candidato per il rilascio di produzione.
Pertanto, ogni commit attiva essenzialmente diversi tipi di test come porte di qualità per garantire che la modifica che viene eseguita non causi il fallimento o la rottura di alcun test.
Specflow - come sappiamo, si integra molto bene con framework noti come NUnit e MSUnit e può essere eseguito facilmente attraverso le applicazioni console di questi framework di test data la DLL del progetto compilato che ha caratteristiche Specflow e implementazioni a fasi.
Pertanto, al fine di ottenere test Specflow in esecuzione come parte di una configurazione di integrazione continua, di seguito è riportato un elenco di passaggi di alto livello che possono essere seguiti:
# 1) Compilare il progetto contenente la funzionalità Specflow e la definizione del passaggio per ottenere una DLL compilata.
#Due) Ora usa i runner della console NUnit o MSUnit e fornisci la DLL compilata come origine del test (questi framework forniscono altre funzionalità e forniscono filtri di test a seconda delle categorie, ecc.).
Questo passaggio può essere integrato con la pipeline di integrazione continua e può essere eseguito tramite shell o script DOS con lo strumento CI come Jenkins o Bamboo ecc.
# 3) Una volta completata l'esecuzione del test, il report di output generato (che è specifico per il runner della console utilizzato), può essere convertito in un report HTML più leggibile utilizzando Specrun eseguibile è disponibile come parte di NugetPackage.
Questo passaggio può essere eseguito anche tramite la riga di comando fornita immediatamente da tutti i principali framework di integrazione continua.
# 4) Una volta completato il passaggio precedente, siamo pronti con il report dei test eseguiti e le metriche riepilogative dei dettagli di esecuzione del test.
Ci auguriamo che l'intera gamma di tutorial in questa serie di formazione Specflow ti sia piaciuta. Questa serie di tutorial sarebbe davvero la migliore guida per qualsiasi principiante o esperto che voglia arricchire le proprie conoscenze su Specflow!
Tutorial PREV OTorna a PRIMO Tutorial
Lettura consigliata
- Domande e risposte dell'intervista
- Domande dell'intervista a Spock con risposte (le più popolari)
- Alcune interessanti domande di intervista sul test del software
- 20 domande e risposte per l'intervista TestNG più popolari
- Top 30+ domande e risposte popolari per l'intervista al cetriolo
- Le 50 domande e risposte dell'intervista CCNA più popolari
- Le 40 principali domande e risposte dell'intervista J2EE da leggere
- Oltre 25 domande e risposte per i colloqui di ADO.NET più popolari