Sono d'accordo con tutte le idee fondamentali del BDD e cerco di usarlo il più possibile. Tuttavia, una cosa che mi colpisce è che l'esterno nello sviluppo e i test che esprimono uno scenario devono avere il controllo sul cliente.
Il termine esterno in sviluppo si riferisce alla pratica dello sviluppo di software scrivendo per prima cosa test di livello / livello alto e utilizzandoli come guida per implementare funzionalità. Per un'eccellente guida a questo approccio, consulta il libro Growing Object Oriented Software (GOOS) .
Pertanto, i framework di automazione del client Web e gli strumenti di automazione dell'interfaccia utente desktop diventano un componente chiave di BDD / TDD.
Nel mio caso, sviluppo software di middle-tier e back-end, quindi i client del mio software sono di solito livelli di servizio come Undertow o Tomcat ecc. o eseguibili autonomi che consumano il mio codice sotto forma di libreria.
In questo caso, mi trovo a scrivere codice che descrive ciò che fa il client come client.ConfirmsMessagesAreInTheQueue();
Sono d'accordo con questo, perché mi fa pensare e implementare il modo in cui un client interagisce con il mio codice, ma mi fa anche pensare che non importa quale sia l'architettura a portata di mano, BDD presuppone che ci sia un client automatico o io devi scriverne uno Altrimenti, non posso descrivere una funzionalità senza alcun tipo di interazione con il client, che può essere un'interfaccia utente gestita dall'utente o un pezzo di codice che viene eseguito come servizio.
Ho capito bene? È questa la norma per BDD / TDD?
Aggiornamento: Devo confessare che mi sono un po 'troppo concentrato sugli scenari in cui l'automazione dell'interfaccia utente è inclusa nell'oscilloscopio BDD. Un esempio molto comune di questo è quando il selenio viene utilizzato per automatizzare l'interazione dell'interfaccia utente nei test end-to-end. Certo, questa non è la definizione dell'ambito per BDD. Questo post del blog sembra fare la distinzione benissimo.