Recentemente ho appreso dei test unitari e TDD e ho iniziato a tornare ad aggiungere test unitari al mio codice (e grazie a Dio, è provato che alcune cose che ho scritto sono molto più rotte di quanto pensassi).
Detto questo, sto facendo fatica a capire quanto (o poco) dovrebbe andare in ogni test. Ad esempio, considera una classe che ho scritto con diversi metodi. In questo momento faccio qualcosa di simile
class test_myclass(unittest.TestCase):
def setUp(self):
...
def test_func1(self):
...
def test_func2(self):
...
etc
def tearDown(self):
...
Ma cosa succede se ogni metodo (o almeno alcuni) può fallire in molti modi diversi o ha molti casi limite? Quindi sono bloccato a fare qualcosa di simile
def test_func1(self):
self.assertEqual(func1(working_input), expected_value)
self.assertRaises(Some_error, func1, args)
self.assertRaises(Some_other_error, func1, args)
etc
E potrebbe diventare piuttosto peloso, e piuttosto poco chiaro dove le cose stanno fallendo. Quindi ho pensato che avrei potuto suddividerlo di più e dedicare una classe a ciascuna funzione (che ha abbastanza casi di test per valerne la pena), ma mi sembra che ci sia un sacco di lavoro e più tempo di quanto dovrei spendere per i test. / p>
Ho anche considerato di scrivere più test per un determinato metodo, come
def test_func1(self):
self.assertEqual(func1(working_input), expected_val)
def test_func1_bad_input_1(self):
self.assertRaises(error, func1, bad_args)
def test_func1_bad_input_2(self):
self.assertRaises(error2, func1, bad_args_2)
...
E questo sembra più pulito di una classe di test unitario per metodo, ma sembra ancora che potrebbe essere troppo scarso in ogni dato test.
Quanto test è troppo?
Mentre il mio esempio è stato fornito in python, sono aperto alle risposte agnostiche della lingua