per scenari semplici
Nel tuo esempio di arr_of_sins
, ha due dipendenze: Math.sin
e Array.new
, tuttavia, entrambi questi sono usati staticamente e quindi per essere sicuri dei tuoi test devi trattarli come hai scritto Math.sin
e Array.new
te stesso nella tua classe di test.
Questo sembra del tutto ridicolo, ma questo è il problema delle dipendenze statiche che non puoi determinare in che modo la tua logica li usa.
Per il tuo caso particolare, sin
può essere tranquillamente e facilmente utilizzato in qualsiasi contesto, quindi per il tuo test potresti chiamare sin
stesso per vedere se il risultato della tua classe corrisponde al risultato previsto, tuttavia, tu presto scoprirai che il tuo test unitario sarà esattamente come il tuo codice di produzione, il che è inutile.
Vorrei seguire la risposta di @ Telastyn e fare i casi per ottenere una buona approssimazione della gamma di output che puoi aspettarti.
per scenari complessi
Il problema sorge quando si entra in scenari più complessi in cui si sta testando il codice che si basa su altri sistemi / sottosistemi. È qui che modelli come l'iniezione di dipendenza e il mockismo possono aiutare a rendere i test dell'unità robusti.
Ad esempio, se stai testando un codice che si basa sull'acquisizione di dati da un altro sistema, supponiamo di dover creare un report in formato CSV da una query su un database.
Se un formattatore CSV e un repository dipendono dal tuo generatore di report, allora puoi prendere in giro entrambe le dipendenze e tutto quello che finisci per testare è che la tua classe usa le dipendenze in un modo che ti aspetti e non che vanno nel database per eseguire query xyz.
per riepilogare
Si scrivono test unitari per garantire che il contenuto dei metodi siano corretti, se si presume che sin
si comporti come previsto, va comunque bene, ma è comunque necessario assicurarsi che l'unità che si sta testando stia effettivamente chiamando sin
, e nell'esempio sopra, l'unico modo per farlo è verificare l'output.
Questo va bene per le unità più piccole dove le dipendenze statiche non hanno dipendenze proprie, ma per casi più complessi è necessario avere una strategia diversa per garantire che l'unità sia corretta.