Sto usando RSpec per scrivere test.Che cos'è un buon codice per testare il rapporto?
Cosa ne pensi, è un buon codice per testare il rapporto?
Sto usando RSpec per scrivere test.Che cos'è un buon codice per testare il rapporto?
Cosa ne pensi, è un buon codice per testare il rapporto?
Un buon rapporto test-code è quello che ti permette di sentirti sicuro nel codice che hai scritto e ti permette anche di refactoring con fiducia saprai che cosa ti interessa nel resto della tua applicazione. Ho avuto rapporti di prova che vanno da 1: 1,5 a 1: 2,5 o giù di lì, può davvero variare a seconda della complessità della vostra applicazione.
Code to Test Ratio è un po 'una statistica fuorviante. Un metodo molto migliore è quello di utilizzare rcov
, si può facilmente utilizzare eseguendo rake spec:rcov
Mentre copertura del 100% del codice è a volte additato come un obiettivo assoluto, si esegue rapidamente nel law of diminishing returns. Personalmente tendo al 90% di copertura del codice in tutto il codice di produzione; anche se questo è principalmente arbitrario, trovo molto più facile avere un numero obiettivo da raggiungere.
Varia. Il codice semplice mi aspetterei tanto codice di test quanto il codice di produzione. Il codice complicato può facilmente meritare il doppio del codice di test. Realizza lo sviluppo guidato e non dovrai preoccuparti del rapporto poiché tutto nel codice è stato guidato da un test e questo è l'importante.
Stiamo parlando di opinioni al momento. Un buon rapporto code-to-test è quello in cui il tuo codice è coperto nella misura in cui deve essere tale da consentire sia la fiducia in ciò che è scritto, sia la certezza che, quando si esegue il refactoring, saprai cosa si sta rompendo intorno a te.
I numeri sono buoni, ma mettere troppo materiale in essi può essere altrettanto pericoloso.
Il mio obiettivo non è un codice non verificato rivelato da rcov e heckle. Quando ottieni tutta la copertura che puoi ottenere con rcov, puoi eseguire il codice tramite heckle. Heckle modifica il tuo codice e ti mostra quali modifiche non sono state rilevate dai test.
rspec conosce l'heckle. Dopo aver installato la gemma heckle: "spec foo_spec.rb -H Foo". Oh, e se ottieni un errore bizzarro, installa la versione 1.2.2 di ruby2ruby invece di 1.2.4.
Ecco heckle lamentano una funzione pensavo di aver pienamente specificato:
The following mutations didn't cause test failures:
--- original
+++ mutation
def model_matches?(substring)
- s = substring.gsub(/\./, ".")
+ s = substring.gsub(/\033!\032\002l\}\?V\010d\}\r\-\fyg,a\*jFT\003_"ga\016\020ufN\0066/, ".")
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
Regexp.new(s, "i").=~(@model)
end
--- original
+++ mutation
def model_matches?(substring)
- s = substring.gsub(/\./, ".")
+ s = substring.gsub(/\./, "\023GA3w+h-#z$?I;a\"k0n^r$\005io#l\023H1M{\034m")
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
Regexp.new(s, "i").=~(@model)
end
--- original
+++ mutation
def model_matches?(substring)
- s = substring.gsub(/\./, ".")
+ s = nil
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
Regexp.new(s, "i").=~(@model)
end
--- original
+++ mutation
def model_matches?(substring)
s = substring.gsub(/\./, ".")
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
- Regexp.new(s, "i").=~(@model)
+ Regexp.new(s, "v\022").=~(@model)
end
Non è fantastico?
Le uniche cose che ho trovato che sono veramente difficili da ottenere la copertura completa del test sono i test che coinvolgono la concorrenza, esp. condizioni di gara. Cercare di dimostrare che un mutex o una sezione critica devono essere in atto può essere difficile. A volte puoi farlo. A volte, devi solo alzare le spalle, inserire la riga di codice che non sai come testare e andare avanti.
Sono d'accordo con questo, rcov è probabilmente meglio. Anche se può essere fuorviante, se è davvero un codice banale, la copertura può essere meno importante, ma non sempre. Questa è un'area davvero soggettiva. – nitecoder
La copertura del codice non è tutto. rcov controlla solo se il codice è eseguito sotto test. Non ti dirà se non stai testando completamente i tuoi condizionali. –
@railsninja Perché la copertura del codice è meno importante nel codice banale? Perché hai intenzione di fare meno errori in codice banale? Penso che una distinzione migliore sarebbe se si tratta di codice di produzione o no. – Olly