Passa ai contenuti principali

ABAP UNIT TEST: usare i test per scoprire gli errori di logica di programma

In ingegneria del software, per unit testing (testing d'unità o testing unitario[1]) si intende l'attività di testing[2] (prova, collaudo) di singole unità software. Per unità si intende normalmente il minimo componente di un programma dotato di funzionamento autonomo; a seconda del paradigma di programmazione o linguaggio di programmazione, questo può corrispondere per esempio a una singola funzione nella programmazione procedurale, o una singola classe o un singolo metodo nella programmazione a oggetti.
Lo unit testing viene normalmente eseguito dagli sviluppatori.... [fonte wikipedia]
Lo UT è utile nello sviluppo permette di controllare classi, function module e programmi
Qual'è la logica che è alla base? Scrivi un metodo in una classe che riceve in input un parametro e restituisce un output.
A seconda del metodo l'output deve può contenere determinati valori. Se fai a mano questo controllo devi andare sempre in debug e controllare pezzo a pezzo. Mamma mia che lungo
Invece lo UT fa il controllo per te: passa in input il parametro e controlla che l'output sia corretto. E ad ogni modifica, rilanciando gli unit tests ti accorgi subito se ci sono errori.
Ora un esempio di come implementare una classe di test in una classe standard.
L'implementazione dello unit test è semplificata da un generatore di uni test
Le fasi sono semplici: selezione classe globale; creazione della classe locale di test e selezione dei metodi da testare; generazione. Ecco le immagini in sequenza


Completata la generazione della classe di test, ritrovi la classe di test come classe locale della standard
Dopo averla generata che si fà? Il generatore crea già del codice.
All'interno della classe di test, la classe di test genera un oggetto della classe standard e ne richiama i singoli metodi. 
Per determinare l'ouput di un metodo è corretto o meno è necessario modificare la classe di test inserendo il codice di controllo dell'output.
Ecco un semplice esempio.
Ho costruito una classe che formatta un record con una serie di valori. In quanto il record ha una lunghezza fissa, indipendentemente dai valori, ho creato una classe di test che non solo controlla l'inserimento dei valori, alcuni sono obbligatori e altri no, ma ne controlla anche la lunghezza. Nel metodo di test del controllo lunghezza ho inserito questo codice:

METHOD get_record.
  DATA: _record TYPE string,
          _len    TYPE i.

    _record = f_cut->get_record(  ).
    _len = strlen( _record ).

    DATA _bool TYPE abap_bool.
    CALL METHOD cl_abap_unit_assert=>assert_equals
      EXPORTING
        act = _len
        exp = 165
*       ignore_hash_sequence = ABAP_FALSE
*       tol =
        msg = 'lunghezza record non rispettata'
*       level            = IF_AUNIT_CONSTANTS=>CRITICAL
*       quit             = IF_AUNIT_CONSTANTS=>METHOD

      .
ENDMETHOD.

in questo codice di esempio recupero il record formattato "f_cut-_>get_record()"; calcolo la lunghezza; controllo la lunghezza fissa 165 tramite il metodo "cl_abap_unit_assert=>assert_equals"
La classe helper "cl_abap_unit_assert" contiene una serie di metodi per effettuare degli assert sui valori di output
Eseguendo i test ecco il controllo della classe:


ecco il risultato dei tests:
 
Naturalmente se ci sono semafori rossi c'è qualcosa che non va. I tests devono dare sempre semafori verdi. 
Il caso del semaforo rosso è dato da: o codice errato della classe standard o il codice del test non corretto. Se il codice del test deve testare che il metodo dia errore in presenza di valori, allora il è necessario implementare un try.. catch e nel catch restituire true.

La documentazione ufficiale contiene tutte le informazioni

Ecco anche la wiki
L'esecuzione dei test avviene con questa sequenza:

Commenti

Post popolari in questo blog

Estendere il report delle partite aperte (FBL1N, FBL5N, FBL3N)

certo le partite aperte aiutano ad analizzare la situazione contabile ma se si è appena partiti con il sistema SAP, come fa l'utente a riconosce a chi appartiene la partita? sul vecchio sistema era abituato ai codici del vecchio sistema, ma su SAP no. un aiutino bisogna darglielo all'utente, quindi perchè non aggiungere il nome fornitore, cliente e conto co.ge. alla lista delle parite? il nome aiuta anche a fare dei subtotali decenti per le fatture da ricevere non ne parliamo: che bello avere la lista con i subtotali per nome fornitore, numero ordine di acquisto e posizione di acquisto estendere il report è semplice. La nota oss 368310 lo spiega un paio di miei appunti alla nota: è necessario estendere sia la struttura RFPOS che RFPOSX con gli stessi campi, o il nome della stessa struttura append in BTE il function module è da aggiungere agli eventi, però attenzione che non troveri l'inserimento 00001650, quindi lo dovrai aggiungere come nuovo e ora un

Caricare e scaricare file su SAP

In questi giorni sono alle prese con un nuovo progetto ed ecco che mi è stata assegnata la patata bollente: il Piano dei Conti. Armato di tanta pazienza e corroborato da un supporto e collaborazione del key user effettuerò le modifiche su un foglio excel che poi carico con LSMW Naturalmente in sviluppo. E per gli altri sistemi? Trucchetto Il trasporto su altri sistemi del piano dei conti è facilitato dalla transazioni FS15 e FS16, pareggio società Ma, ed è qui che casca l'asino, l'invio del piano dei conti genera un file in formato txt sulla directory del server. Come estrarre il file e trasportarlo negli altri sistemi? Opzione 1: mi creo un programmino custom che mi porto dietro con me da bravo consulente; lo caric o in sviluppo, lo trasporto in test e poi in produzione. Noooooooooo, non è la soluzione migliore. Eureka: CG3Z e CG3Y! Due transazioni per scaricare e caricare i file dal server: CG3Y per scaricare e CG3Z per caricare Più nessun bisogno d

Caricare le anagrafiche banche

il caricamento delle anagrafiche banche su SAP è relativamente semplice. Esiste una transazione apposita basta caricare il file standard rilasciato dal corporate banking info ecco il link per scaricarlo:  http://www.querciacb.info/it-IT/archivio_abicabit.html aggiornamento ecco un nuovo link per scaricare il file https://tesoreria.unicreditbanca.it/tesoreria/abicab/abicab.html