NA01
23-12-2005, 10:11
ho scritto codice e test per una classe che servirà da elementi in un lista.
ogni elemento della classe rappresenta un processo, e, ragionevolmente non deve mai essere cancellato se non quando il processo è morto.
seguendo questa idea nel distruttore ho messo il controllo sull'esistenza del processo.
l'idea è quella di loggare il problema, ma non in tutti i casi.
quando chiudo il mio programma la lista dei processi attivi sarà sicuramente piena di processi ancora esistenti, e in quel caso non si deve loggare nulla ;)
quindi ho pensato di far lanciare al distruttore un'eccezione. in questo modo a seconda del punto del codice in cui la intercetto posso gestirla come meglio credo.
il problema è che tutti i test sulla funzione falliscono con un error. questo perchè nel test creo una classe con il pid del processo corrente, e prima di chiudere la funzione questa viene automaticamente distrutta (ma ovviamente il processo esise ancora).
ho provato a inserire
CPPUNIT_TEST(exist);
CPPUNIT_TEST_EXCEPTION(exist, StillExistException);
dove il codice di exist è:
void ChainElemTest::exist(){
ChainElem elem(getpid());
CPPUNIT_ASSERT(elem.exist());
}
ma il risultato del test è:
ChainElemTest::newElem : OK
ChainElemTest::exist : OK
ChainElemTest::exist : assertion
:mbe:
:cry:
why? :(
se tolgo il throw nella funzione tutto funziona bene, ma come faccio a gestire i log?
ciao
ogni elemento della classe rappresenta un processo, e, ragionevolmente non deve mai essere cancellato se non quando il processo è morto.
seguendo questa idea nel distruttore ho messo il controllo sull'esistenza del processo.
l'idea è quella di loggare il problema, ma non in tutti i casi.
quando chiudo il mio programma la lista dei processi attivi sarà sicuramente piena di processi ancora esistenti, e in quel caso non si deve loggare nulla ;)
quindi ho pensato di far lanciare al distruttore un'eccezione. in questo modo a seconda del punto del codice in cui la intercetto posso gestirla come meglio credo.
il problema è che tutti i test sulla funzione falliscono con un error. questo perchè nel test creo una classe con il pid del processo corrente, e prima di chiudere la funzione questa viene automaticamente distrutta (ma ovviamente il processo esise ancora).
ho provato a inserire
CPPUNIT_TEST(exist);
CPPUNIT_TEST_EXCEPTION(exist, StillExistException);
dove il codice di exist è:
void ChainElemTest::exist(){
ChainElem elem(getpid());
CPPUNIT_ASSERT(elem.exist());
}
ma il risultato del test è:
ChainElemTest::newElem : OK
ChainElemTest::exist : OK
ChainElemTest::exist : assertion
:mbe:
:cry:
why? :(
se tolgo il throw nella funzione tutto funziona bene, ma come faccio a gestire i log?
ciao