Di solito mi imbatto in questo problema e non sono sicuro di come superare questo ostacolo. Voglio davvero iniziare ad imparare e ad applicare Test-Driven-Development (o BDD, o qualsiasi altra cosa) ma sembra che ogni applicazione che faccio dove voglio applicare sia praticamente solo roba di database standard CRUD, e non sono sicuro di come per applicarlo. Gli oggetti praticamente non fanno nulla oltre a essere persistenti in un database; non c'è una logica complessa che deve essere testata. C'è un gateway che alla fine avrò bisogno di testare per un servizio di terze parti, ma voglio ottenere prima il nucleo dell'applicazione.Applicazione di TDD quando l'applicazione è al 100% CRUD
Ogni volta che provo a scrivere test, finisco solo per testare cose di base che probabilmente non dovrei testare in primo luogo (ad esempio getter/setter) ma non sembra che gli oggetti abbiano qualcos'altro. Immagino di poter testare la persistenza, ma questo non mi sembra mai giusto perché non dovresti colpire un database, ma se lo prendi in giro non testerai nulla perché controlli i dati che vengono restituiti; come ho visto molti esempi in cui esiste un repository simulato che simula un database eseguendo il ciclo e creando un elenco di valori noti, e il test verifica che il "repository" possa recuperare un determinato valore ... non vedere il punto di un test come questo perché ovviamente il "repository" restituirà quel valore; è hard-coded nella classe! Bene, lo vedo da un punto di vista TDD puro (cioè è necessario avere un test che dice che il repository ha bisogno di un metodo GetCustomerByName o qualsiasi altra cosa prima di poter scrivere il metodo stesso), ma sembra seguire il dogma senza una ragione diversa dal suo " il modo "- il test non sembra fare nulla di utile oltre a giustificare un metodo.
Sto pensando a questo nel modo sbagliato?
Ad esempio, eseguire una corsa dell'applicazione di gestione dei contatti del mulino. Abbiamo contatti e diciamo che possiamo inviare messaggi ai contatti. Abbiamo quindi due entità: Contact
e Message
, ciascuna con proprietà comuni (ad esempio Nome, Cognome, Email per il contatto, Oggetto e corpo e Data per messaggio). Se nessuno di questi oggetti ha un comportamento reale o è necessario eseguire alcuna logica, come si applica TDD quando si progetta un'app in questo modo? L'unico scopo dell'applicazione è essenzialmente quello di estrarre un elenco di contatti e visualizzarli su una pagina, visualizzare un modulo per inviare un messaggio e simili. Non sto vedendo nessun tipo di test utili qui - potrei pensare ad alcuni test ma sarebbero praticamente dei test per il gusto di dire "Vedi, ho degli esami!" invece di testare un qualche tipo di logica (sebbene Ruby on Rails ne faccia buon uso, non ritengo che la validazione dei test sia un test "utile" perché dovrebbe essere qualcosa che il framework si prende cura di voi)
Devo solo dire ... I * love * il titolo di questo domanda. – Shog9
Questa è una domanda molto buona. Credo che la maggior parte delle volte, quando ascoltiamo argomentazioni sulla giustificazione dei costi del TDD, in realtà parlano specificamente di applicazioni simili a CRUD. – Sake
Questo è quello che ho notato anche io.Voglio * usare * TDD (beh non necessariamente TDD, ma testare) ma non riesco mai a pensare a cosa testare quando l'app ha solo bisogno di estrarre dati - ho ottenuto alcune risposte fantastiche qui, però. –