Qual è la tipica vista di Python sul riutilizzo di moduli python al di fuori del loro intento iniziale?

4

Domanda breve
Vola di fronte alla vista di Python per riutilizzare / riutilizzare i moduli Python per i progetti fuori dal loro intento?

Sfondo
Negli ultimi mesi ho lavorato a un progetto che utilizza il modulo unittest di Python per eseguire test di sistema manuali. Consulta le domande 1 2 e 3 per maggiori dettagli sul mio progetto e alcuni degli ostacoli che ho dovuto superare.

Mi piacerebbe sapere, in generale, se è accettabile riutilizzare i moduli per altri scopi? La maggior parte dei commenti che ho ricevuto sono stati sulla falsariga di "questo non è un unittest", o "dovresti scrivere il tuo testrunner". La mia risposta è che se un modulo esegue il 90% di ciò che ti serve per eseguire litte senza modifiche e contiene funzionalità aggiuntive (consapevolmente non necessarie), perché mai scriverebbe il tuo modulo?

    
posta Adam Lewis 23.08.2011 - 06:09
fonte

1 risposta

4

Utilizzare il codice per qualcosa di più di quello che gli autori originali intendevano è solitamente un buon segno, in quanto il codice fornisce strumenti utili. Per quanto riguarda la ri-proposizione di moduli "al di fuori del loro intento", beh ... questo è ovviamente soggettivo e dipende fino a che punto.

Utilizzo di funzioni I / O non elaborate in imaplib per implementare un socket non correlato basato sul protocollo di comunicazione potrebbe essere considerato di cattivo gusto (per non dire altro). Tuttavia, l'utilizzo della stessa libreria imaplib per implementare alcune varianti private del protocollo IMAP (improbabile che sia l'uso previsto) sarebbe IMHO meno un problema.

È del tutto comprensibile che tu possa trovare alcune classi e metodi convenienti nel modulo unittest per implementare altri tipi di test. Tuttavia, il problema è spesso di leggibilità del codice. Per la maggior parte degli sviluppatori Python, vedere il modulo unittest vicino all'utilizzo suggerito idiomatico probabilmente trasmette il significato di "questo pezzo di codice è un test unitario" . In termini di "codice di auto-documentazione", questo è un fallimento totale nel senso che è fuorviante per altri sviluppatori .

Idealmente, questa sarebbe una non-domanda. La soluzione sarebbe quella di rifattorizzare il modulo unittest in modo che il codice non specifico per i test unitari sia spostato su un modulo test o testbase o qualcosa del genere. Tuttavia, potresti trovare molta resistenza in tale sforzo, per ragioni politiche e pratiche. Dopo tutto, è un modulo di libreria standard e non può essere modificato facilmente come il tuo progetto.

Does it fly in the face of the Pythonic view to reuse / repurpose python modules for projects out side of their intent?

In generale, non penso che questo sia "anti-Pythonic", anche se penso che il fatto che questi commenti siano accaduti più volte dovrebbe significare qualcosa.

Forse puoi scrivere una sorta di modulo systemtest che importa le cose riutilizzabili dal modulo unittest . È una soluzione temporanea che offre sia la chiarezza del codice che consente di riutilizzare il codice direttamente. Quindi, puoi scrivere un lungo commento nel modulo systemtest su come tutte le soluzioni alternative siano effettivamente migliori rispetto alla scrittura del tuo runner di test.

    
risposta data 23.08.2011 - 06:38
fonte

Leggi altre domande sui tag