Mi è stato chiesto di realizzare un piccolo progetto parallelo per fornire una semplice applicazione a uno dei nostri clienti. Normalmente lavorerei su un codice back-end in cui ho trovato tutte le mie esigenze di test e non ho ancora avuto il dubbio piacere di scrivere test per la GUI, quindi non mi è chiaro come dovrei impostare il codice di test e gli strumenti per un EXE.
Il mio primo istinto era semplicemente includere i test con il codice dell'applicazione, tuttavia ciò avrebbe richiesto la fornitura di un certo numero di dipendenze specifiche del test, che mi è stato detto di non spedire specificamente al cliente. Non riesco nemmeno a spremere soldi per uno strumento di test appositamente creato, quindi ho bisogno di usare gli strumenti che ho a disposizione ( StoryQ , RhinoMocks e NUnit ), che in realtà dovrebbero essere più che sufficienti per testare il comportamento di una semplice app GUI. Quindi, per quanto posso vedere, questo mi lascia tentare di trovare un buon equilibrio tra mantenere il design davvero semplice, o sovra-ingegnerizzare in modo mirato per i test. Sembra che sto costruendo l'app con la business logic in una libreria separata e testando la libreria come faccio di solito, o trovando qualche altro meccanismo che mi consenta di eseguire l'eseguibile senza scomporre moduli aggiuntivi che la progettazione dell'applicazione non davvero bisogno.
Modifica
Si noti che questa domanda riguarda il modo in cui strutturare la relazione tra NUnit e il mio eseguibile - al contrario di una DLL - e non su come separare la presentazione e la logica di business.
/ Modifica
Quindi la mia domanda è:
- Esiste un metodo specifico / consigliato per configurare un'applicazione GUI semplice con test unitari per permettermi di verificare adeguatamente lo stato e il comportamento, utilizzando gli strumenti che ho a disposizione e senza ricorrere all'ingegnerizzazione?
- Ho perso qualcosa di fondamentale nel modo in cui NUnit dovrebbe essere invocato / configurato durante il test di un EXE (al contrario di una DLL)?
- Puoi fornire o indicarmi la direzione di esempi su come ottenere tutto questo?
Mi rendo conto che potrebbe esserci più di un modo per farlo, quindi sono alla ricerca di linee guida di implementazione specifiche in base alla tua esperienza.