2014-10-29 19 views
5

Ho un modulo che sto scrivendo unit test per l'esecuzione con travis.ci.Come si scrive un test unitario per una funzione che non viene esportata?

Nel mio modulo eseguo operazioni HTTP POST su un servizio web.

Una delle mie funzioni interne, validate_http_response(), è parte integrante delle funzioni che sto creando per fare il giro delle chiamate di servizio Web, quindi mi piacerebbe testarlo. Tuttavia, poiché non v'è alcuna export validate_http_response la funzione non può essere "visto" dal mio script di test e ottengo l'errore:

validate_http_response not defined 

Come devo strutturare la mia prova in modo che io non devo copiare e incollare le funzioni interne nel test stesso (ce ne sono alcune)? Mi piacerebbe evitare di dover gestire uno script src e test contemporaneamente.



EDIT Insieme con la risposta accettata Ho anche scoperto che potevo fare le seguenti all'inizio dello script di test: include("../src/myfunctions.jl"), come ho uno script di test separato per ogni file nel src.

risposta

8

Ancora una volta, controlla il documentation sui moduli per capire meglio come funziona lo spazio dei nomi. Non c'è visibilità forzata in Julia, quindi puoi sempre accedere alle funzioni, esportate o non esportate, in qualsiasi modulo, qualificando completamente il riferimento. Quindi, nel tuo caso, se il tuo modulo è denominato HTTP, potresti dire HTTP.validate_http_response per accedere alla funzione non descritta da testare.

+1

Completamente qualificante il riferimento è sicuramente il modo Julian di gestirlo. – IainDunning

+0

Works. Alla fine ho trovato più semplice fare semplicemente: 'include (" ../src/myfunctions.jl ")' quindi non devo fare riferimento a tutto il tempo .. digitando pigro. –

0

ci sono due soltutions:

  1. esportare la funzione.
  2. Creare un nuovo modulo che contiene il codice di convalida per le richieste HTTP. Sposta la funzione lì. Ora fa parte di un'API ufficiale/pubblica e può essere testato indipendentemente.

La prima soluzione è semplice ma sporca la tua API. Il secondo è pulito ma probabilmente molto lavoro.

Problemi correlati