2010-05-28 13 views
6

Sto scrivendo unit test per un modulo in una piccola applicazione Javascript. Per mantenere l'interfaccia pulita, alcuni dettagli di implementazione sono chiusi da una funzione anonima (il solito schema JS per la privacy). Tuttavia, durante il test devo accedere/simulare/verificare le parti private.Test white-box in Javascript: come gestire la privacy?

La maggior parte dei test che ho scritto in precedenza sono stati in Python, dove non ci sono vere variabili private (membri, identificatori, qualsiasi cosa tu voglia chiamarli). Si suggerisce semplicemente la privacy tramite un trattino di sottolineatura principale per gli utenti e si ignora liberamente durante il test del codice. In linguaggi OO tipizzati staticamente, suppongo che uno possa rendere i membri privati ​​accessibili ai test convertendoli in modo da essere protetti e sottoclasse l'oggetto da testare. In Javascript, quest'ultimo non si applica, mentre il primo sembra una cattiva pratica.

Potrei sempre tornare ai test della scatola nera e controllare semplicemente i risultati finali. È l'approccio più semplice e pulito, ma sfortunatamente non abbastanza dettagliato per le mie esigenze.

Quindi, esiste un metodo standard per mantenere le variabili private pur mantenendo alcune backdoor per i test in Javascript?

+8

Hmm, non mi piace quando le persone prendono in giro le mie parti private – Martin

risposta

1

No. Non credo ci sia. In sostanza si riduce a se si prende l'approccio di chiusura e rinunciare ai test white box o fare test white box e utilizzare la decorazione del nome per i membri "privati". In realtà non solo in Python, ma in javascript troppi progetti usano il carattere di sottolineatura non così magico per decorare i privati. Quindi in un certo senso questa è già una soluzione ampiamente accettata per il problema.

Se non lo vuoi e hai davvero bisogno di test dell'unità white-box, puoi sempre integrare i test nei tuoi oggetti. Se si dispone di una fase di compilazione separata per il codice di produzione (minimizzazione, richiesta/offerta-risoluzione, ecc.), È possibile rimuovere le funzioni di test in questo processo.

+0

Bene, sembra che dovrò fare un po 'di decorazione, dopo tutto. Grazie. Incorporare i test nel codice principale e rimuoverlo durante la compilazione è una soluzione interessante, ma un po 'troppo caotica. –

Problemi correlati