[Python] pytest e classi

enrico franchi enrico.franchi a gmail.com
Mer 28 Ott 2015 15:24:49 CET


2015-10-28 11:38 GMT+00:00 Manlio Perillo <manlio.perillo a gmail.com>:

>
> > Eh... come dicevo, fanno tutti cosi', e' sensato farlo anche solo per
> > semplificare il ragionamento ai tuoi utenti.
> > Sebbene, a mio avviso, ancora una volta Go rompe gli schemi per fare la
> cosa
> > giusta.
> >
>
> Go può farlo perchè è safe rispetto a C.
> In C se vuoi continuare dovresti gestire SIGSEV, cosa non banale e non
> portabile.
>

Si, ok, ci sono un po' di cose diverse, ma non direi che quello e' il
problema.

Spiego meglio: in C potresti fare una suite di test che invece che usare
una qualche funzione "assertOk" che ti vola fuori dalla funzione chiamante
in caso di problemi (ovviamente tutto bello integrato con la libreria di
testing) utilizza una funzione "error" analoga alla funzione omonima di Go.

Detto questo, devi *comunque* gestire SIGSEV, perche' al di la di tutto uno
puo' sempre avere un baco nel codice che scoppia con SIGSEV e quello che
vorresti e' che il processo che sta facendo girare i test non muoia
immediatamente ma esegua gli altri test. Il che e' chiaramente un problema
non da poco, visto che SUSv3 ti dice chiaro e tondo che i seguenti
comportamenti sono undefined behavior:
1. ritornare dal sig handler
2. bloccarlo
3. ignorarlo

Per cui di fatto l'unica cosa che potresti fare e' pulire quello che devi
pulire, eventualmente salvare un po' di stato da qualche parte (che so...
statistiche per il test runner o qualunque cosa) e poi comunque uscire.

Quindi credo di avere capito quello che intendevi... ma non credo sia un
problema. Nel senso che per come funziona C, di fatto, devi eseguire i vari
test in processi separati (perche' troppe cose possono mandare in undefined
behavior il tutto, quindi non puoi avere un singolo processo che esegue
tutti i test). Detto questo puoi offrire Error con la semantica di Go. Se
poi per qualunque motivo devi abortire (SIGSEV e' solo uno dei casi),
vorra' dire che il gestore di test scoprira' che quello specifico test e'
fallito [e potenzialmente avra' qualche informazione aggiuntiva]. Mi
verrebbe anche da dire che se vuoi usare  ptrace (e probabilmente lo vuoi
fare) ti da anche una struttura molto piu' logica.



-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20151028/a7a33d7b/attachment.html>


Maggiori informazioni sulla lista Python