UNIT TESTING
    Talk 5
WIKIPEDIA

• Lounit testing è una procedura usata per verificare
 (testing) singole parti di un codice sorgente (unit).
 • Semplifica   le modifiche.
 • Semplifica   l'integrazione.
 • Fornisce   documentazione.
 • Separa   l'implementazione dall'interfaccia.
SEMPLIFICA LE MODIFICHE

• Test"polaroid": verifica la stato corrente del
 codice e permette di capire se una modifica
 al codice introduce bug: refactoring.
• Unit
     test continuo (Ruby, Javascript): i test
 vengono eseguiti ad ogni modifica.
SEMPLIFICA L'INTEGRAZIONE

• Verificando   il funzionamento di ogni
 singola unità, nell'integrazione tra più unità
 non ci si preoccupa del funzionamento
 delle altre.
• Si
   controlla meglio la propagazione dei
 bug.
FORNISCE
              DOCUMENTAZIONE

• Lo   Unit Test è la documentazione viva dell'unità in test.

• Il Test
       usa il codice secondo le specifiche e le verifica
 continuamente.

• Il Test   è l'implementazione della specifica.
SEPARA L'INTERFACCIA
     DALL'IMPLEMENTAZIONE

• Poichéle classi vanno testate in modo isolato, le collaborazioni
 vanno "falsificate" (mock).

• Quindi, la  classe in test usa le collaboratrici solo tramite la
 loro interfaccia.

• Altrimenti, sto    testando anche le collaboratrici.
NON È UNIT TEST SE:

• Accede     al database.

• Parla   con la rete.

• Tocca    il filesystem.

• Non     può essere eseguito in contemporanea ad altri test.

• Bisogna    preparare l'ambiente.
NIENTE SCUSE!

• Non     ho tempo.
• Non     è codice di produzione.
• Se    cambio le classi devo cambiare i test.
• Il   mio codice non ha bisogno di test!
IN QUALUNQUE
                            LINGUAGGIO
• Java: JUnit, TestNG, Jtest, JExample,

• Delphi: DUnit

• C#:csUnit, MbUnit, NUnit

• Ruby: RSpec

• Javascript: JSUnit, 

• Python: unittest, Nose, py.test

• C++: CppUnit, CPUnit, QtTest

• ...
ESEMPIO PRATICO

05 unit testing

  • 1.
  • 2.
    WIKIPEDIA • Lounit testingè una procedura usata per verificare (testing) singole parti di un codice sorgente (unit). • Semplifica le modifiche. • Semplifica l'integrazione. • Fornisce documentazione. • Separa l'implementazione dall'interfaccia.
  • 3.
    SEMPLIFICA LE MODIFICHE •Test"polaroid": verifica la stato corrente del codice e permette di capire se una modifica al codice introduce bug: refactoring. • Unit test continuo (Ruby, Javascript): i test vengono eseguiti ad ogni modifica.
  • 4.
    SEMPLIFICA L'INTEGRAZIONE • Verificando il funzionamento di ogni singola unità, nell'integrazione tra più unità non ci si preoccupa del funzionamento delle altre. • Si controlla meglio la propagazione dei bug.
  • 5.
    FORNISCE DOCUMENTAZIONE • Lo Unit Test è la documentazione viva dell'unità in test. • Il Test usa il codice secondo le specifiche e le verifica continuamente. • Il Test è l'implementazione della specifica.
  • 6.
    SEPARA L'INTERFACCIA DALL'IMPLEMENTAZIONE • Poichéle classi vanno testate in modo isolato, le collaborazioni vanno "falsificate" (mock). • Quindi, la classe in test usa le collaboratrici solo tramite la loro interfaccia. • Altrimenti, sto testando anche le collaboratrici.
  • 7.
    NON È UNITTEST SE: • Accede al database. • Parla con la rete. • Tocca il filesystem. • Non può essere eseguito in contemporanea ad altri test. • Bisogna preparare l'ambiente.
  • 8.
    NIENTE SCUSE! • Non ho tempo. • Non è codice di produzione. • Se cambio le classi devo cambiare i test. • Il mio codice non ha bisogno di test!
  • 9.
    IN QUALUNQUE LINGUAGGIO • Java: JUnit, TestNG, Jtest, JExample, • Delphi: DUnit • C#:csUnit, MbUnit, NUnit • Ruby: RSpec • Javascript: JSUnit, • Python: unittest, Nose, py.test • C++: CppUnit, CPUnit, QtTest • ...
  • 10.