Friday, 26 February 2010

File CVS e caratteri riservati

Fare attenzione ai file CSV che contengono caratteri come doppio apice: se si aprono con Open Office e si salva il file essi vengono malposti.

Ad es. se ho un file CSV che contiene la stringa (si noti uso di \ per fare escape del doppio apice):

"ESTRAZIONE FILE \"C\""

Aprendolo e salvandolo da Open Office si avra':

"ESTRAZIONE FILE \C\"""""

quindi con modifica del dato.

Purtroppo occorre ripristinare a mano aprendolo con file di testo quindi e' opportuno che suoi file CSV non si usino caratteri tipo " all'interno dei dati.

Thursday, 18 February 2010

Test 2

Quando si effettuano modifiche alla persistenza occorre inserire anche rispettive modifiche nei test.


Ad es. e' stata fatta questa modifica.
Da:
if (aTipo == 2) {

    // 15 - PROGRAMMARE
    op.setProgrammarePer(ProgrammarePer.converti(record.get(15)));

A:
// 15 - PROGRAMMARE
op.setProgrammarePer(ProgrammarePer.converti(record.get(15)));

if (aTipo == 2) {

Apparentemente minima ma essa comporta che il campo programmarePer viene settato per tutti i messagi che utilizzano il record RECPROANLZ, in particolare per il metodo extGetProveByAnalizzatore(..).

Quindi: 
  1. e' bene testare il nuovo campo in modo che se un domani cambio idea e rispristino situazione iniziale ho un test che mi segnala dove questo campo non sara' piu' disponibile.
  2. Se test e' condiviso con persistenza DB (tutti saranno progressivamente condivisi) mi segnala che occorre fare modifica anche su quest'ultima per allinearla con SALKI/SALVAL.

Test modificato:
public void testExtGetProveByAnalizzatore2() {
try {
List<Prova> rows = lab.extGetProveByAnalizzatore("PSM");

........

// Spostato  da tipo 2 a 1, quindi restituito qui
assertEquals(ProgrammarePer.TUTTI, prova.getProgrammarePer());

} catch (Exception e) {



Test

 Alcune considerazioni sulla scrittura dei test partendo da questo test iniziale:
   @Test 

    public void testExtModificaStatoAnalizzatore2() {
        try {            

            String sigla = "PieSSeeMMe";
            
            List rows = lab.extGetAnalizzatoriByDes(sigla);
            
            assertEquals (1,rows.size());
            
            Analizzatore ana = (Analizzatore) rows.get(0);

            if (ana.isStatoColloquio()) {
                lab.extModificaStatoAnalizzatore("",
                        OpAnalizzatore.DISATTIVA_COLLOQUIO, ana.getCod());
            } else {
                lab.extModificaStatoAnalizzatore("",
                        OpAnalizzatore.ATTIVA_COLLOQUIO, ana.getCod());
            }
            assertTrue(true);        
        } catch (Exception e) {
            fail(e.getMessage());
        }
    }   
 

  1. Sulle collection specificare il tipo di oggetti contenuti, facilita scrittura e comprensione. Invece di List List<Analizzatore>.
  2. Dare sempre occhiata che non ci siano warnings oltre che errori (tabs dei problemi). 
  3. Fissare import (CTRL + O).
  4. Alla fine dei test i dati devono essere invariati. Ad es. se aggiungo accettazione la devo cancellare alla fine del test. Esiste su DBL un modo per ripristinare i dati nel caso si verifichi errore durante esecuzione dei test che ha modificato i dati? Ad es. sul DB spiano e ricarico i dati di test e si riparte sempre dalla stessa situazione
  5. Sui test far lanciare le eccezioni, meno codice da scrivere.
  6. Fare sempre controllo su ID dell'oggetto per sapere se e' lui! Nel test di cui sopra si controlla solo il numero di oggetti restituiti.
  7. Le verifiche quando e' possibile vanno fatte rileggendo oggetti modificati dalla persitenza. Nell'esempio di cui sopra il test uscirebbe positivo anche se lo stato dell'analizzatore non e' cambiato: si testa solo che la chiamata non generi eccezione.

Il test e' stato modificato come riportato sotto, si noti in particolare la rilettura e il ripristino dello stato dei dati alle condizioni iniziali.
@Test 
public void testExtModificaStatoAnalizzatore2() throws Exception {

String sigla = "PieSSeeMMe";

List<Analizzatore> rows = lab.extGetAnalizzatoriByDes(sigla);
assertEquals(1, rows.size());
Analizzatore ana = (Analizzatore) rows.get(0);

assertEquals("PSM", ana.getCod());

// Stato dell'oggetto iniziale
assertEquals(false, ana.isStatoColloquio());

// Cambio lo stato dell'oggetto
lab.extModificaStatoAnalizzatore("",
OpAnalizzatore.ATTIVA_COLLOQUIO, ana.getCod());
// Verifico cambiamento dei dati rileggendoli
rows = lab.extGetAnalizzatoriByDes(sigla);
assertEquals( 1, rows.size());
ana = (Analizzatore) rows.get(0);
assertEquals("PSM", ana.getCod());
assertEquals(true, ana.isStatoColloquio()); // nuovo stato

// Ripristino e riverifico
lab.extModificaStatoAnalizzatore("",
OpAnalizzatore.DISATTIVA_COLLOQUIO, ana.getCod());
rows = lab.extGetAnalizzatoriByDes(sigla);
assertEquals( 1, rows.size());
ana = (Analizzatore) rows.get(0);
assertEquals("PSM", ana.getCod());
assertEquals(false, ana.isStatoColloquio()); // stato di partenza (dati invariati)
}


Passi della via di mezzo

Passi della via di mezzo

Giusti punti di vista: punti di vista, cioe', e parere esenti da falsi concetti e da fini egoistici

Giueste aspirazioni: grazie alle quali si possono avere intenzioni e opinini nobili e degne

Giusto modo di esprimersi: grazie al quale si e' cortesi, rispettosi e sinceri.

Giusto comportamento: esso consente di essere sereni, onesti e altruisti

Giusto modo di vivere: per attenersi a questo precetto occore evitare di nuocere a uomini e naimali ed e' necessario riconoscere a questi ultimi il diritto all'esistenza.

Giusto impegno: occorre sapersi dominare e sottoporsi ad un addestramento continuo

Giusta circospezione: nel pensare solo cio' che e' giusto e nel fare soltanto cio' che si sa essere giusto.

Giusto rapimento: e' questo il piacere tratto dalla meditazione sulla realta' della vita e del super Io.

Followers