Come dovrei aggiungere test per tutti i miei progetti?

4

Mi sono insegnato come programmare per circa un anno (ho 17 anni) e una delle cose più comuni che ho incontrato leggendo articoli sulla programmazione sono test automatici per il tuo codice.

So che i test automatici sono qualcosa di molto utile ma non riesco ancora a capirlo, cosa dovresti testare nel tuo codice?

Ho visto la maggior parte delle esercitazioni sui test di unità di scrittura utilizzare assert_equal (in Python) per testare due valori.

Ora ad esempio ho questo progetto che è un po 'una calcolatrice, come dovrei scrivere test per la trigonometria parte?

È questo il modo corretto di testare lo script?

from src.trigonometry import calculate
def test_calculate():
    assert_equal(calculate("Degree", "Sin", 90), Math.sin(90 * Math.PI/180))
    # Similar assert_equals for other trig functions with angle 90

Un'altra cosa di cui sono confuso è come dovrei scrivere test per script che interagiscono con il web come:

posta Areeb Beigh 19.06.2016 - 12:08
fonte

2 risposte

5

Is this the correct way of testing the script?

assert_equal(calculate("Degree", "Sin", 90), Math.sin(90 * Math.PI/180))

Verifica se la tua funzione si comporta in modo identico alla libreria standard. Non se si comporta nel modo in cui ti aspetti che si comporti. È meglio codificare il risultato previsto:

assert_equal(calculate("Degree", "Sin", 90), 1.0)

how am I supposed to write tests for scripts that interact with the web?

I test unitari dovrebbero essere il più indipendenti possibile da altri componenti.

Quando hai il tuo test unitario online e fai una richiesta di rete, non stai solo testando il tuo codice, ma anche la tua connessione internet e il servizio con cui interagisci. Questo è un test di integrazione, non un test unitario. Il problema con questi test è che se falliscono, non sai mai se è il tuo codice che è la colpa, la tua connessione Internet che non funziona o un errore nel servizio con cui interagisci.

In un buon test di unità minimizzi il più possibile le dipendenze da altre risorse. Un metodo comune per questo sono oggetti fittizi . Un oggetto mock è un oggetto che guarda e si comporta identico a un oggetto che astrae una risorsa esterna (come una connessione di rete o un oggetto di connessione al database), ma invece di fare effettivamente una richiesta di rete fa solo fa finta uno e restituisce un risultato hardcoded. Ciò consente di verificare se il codice funziona correttamente senza dipendere dal servizio di terze parti.

Per consentire ai test delle unità di testare il codice con una connessione di rete simulata anziché reale, è necessario seguire una metodologia di sviluppo chiamata injection dependency . Questa metodologia indica che ogni volta che un oggetto ha una dipendenza da una risorsa, non acquisisce la risorsa stessa ma ottiene l'oggetto dall'esterno. Ciò consente al codice di produzione di fornire una vera connessione di rete e il codice di test per fornire una connessione di rete fittizia.

La cosa bella delle connessioni di rete simulate è che puoi implementarne molte diverse con comportamenti diversi. Ciò consente di implementare test per la gestione degli errori nel caso in cui il server non si comporti come al solito. Ad esempio, puoi verificare come si comporta il tuo codice quando il server chiude improvvisamente la connessione, risponde con un messaggio di errore o risponde con garbage totale.

    
risposta data 19.06.2016 - 19:40
fonte
1

Pur non essendo uno sviluppatore python, i test devono essere leggibili. Quindi suggerirei di riscrivere il test:

from src.trigonometry import calculate 
def test_calculate():

    expected = 0
    actual = calculate("Degree", "Sin", 90)

    assert_equal(expected, actual)
    
risposta data 19.06.2016 - 19:09
fonte

Leggi altre domande sui tag