Ho recentemente convertito il mio sistema di build in automake/autoconf. Nel mio progetto ho alcuni test unitari che richiedono alcuni file di dati di input nella directory da cui vengono eseguiti. Quando eseguo make distcheck e prova la build VPATH, questi test falliscono perché apparentemente non vengono eseguiti dalla directory in cui si trovano i file di input. Mi stavo chiedendo se c'è qualche soluzione rapida per questo. Per esempio, posso in qualche modo dire al sistema di non eseguire questi test sul make distcheck (ma li eseguo comunque su make check)? O fare un cd nella directory in cui si trovano i file prima di eseguire i test?make distcheck e test che necessitano di file di input
risposta
La soluzione tipica è scrivere i test in modo che guardino nella directory di origine per i file di dati. Ad esempio, è possibile fare riferimento a $srcdir
nel test oppure convertire test
in test.in
e fare riferimento a @[email protected]
.
Se i test sono tutti nella directory di origine, è possibile eseguire tutte le prove in quella directory impostando TESTS_ENVIRONMENT in Makefile.am:
TESTS_ENVIRONMENT = cd $(srcdir) &&
Questo fallirà se alcuni dei vostri test sono creati da configure e quindi vivere solo nella directory di compilazione, nel qual caso è possibile selettivamente cd con qualcosa di simile:
TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } &&
cercando di utilizzare TESTS_ENVIRONMENT come questo è fragile nella migliore delle ipotesi, e sarebbe meglio scrivere i test in modo che guarda nella fonte terribile ctory per i file di dati.
Ho avuto lo stesso problema e ho usato una soluzione simile a quella di William. Il mio Makefile.am simile a questa:
EXTRA_DIST = testdata/test1.dat
AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"
Poi, nel mio unittest, io uso il DATADIR definire:
string path = DATADIR "/testdata/test1.dat"
Questo funziona con make check
e make distcheck
.
- 1. Make babel esclude i file di test
- 2. metodo di test phpunit che chiama altri metodi di classe che necessitano di simulazione
- 3. Utilizzare "make check" per avviare lo script di bash per i test che utilizzano il programma binario
- 4. MSTest: Test unitario - File di input non trovato ... vsmdi
- 5. DESTDIR e PREFIX di make
- 6. Angular 2 make @Input on directive required
- 7. perché "make" prima di "make install"
- 8. File input e Dart
- 9. Come fornire stdin, file e input di variabili d'ambiente ai test di unità Python?
- 10. come "eseguire" make file
- 11. Esiste un framework di test unitario per GNU make?
- 12. Le macchine virtuali necessitano di partizioni di swap?
- 13. Qual è la differenza tra `make: console` e` make: command`?
- 14. Unit testing con un file di input
- 15. Che cos'è un "make target"?
- 16. Come passare i parametri ai test in un file di input Automake?
- 17. Perché GNU Make eliminare un file
- 18. Wordpress aggiorna le istanze per gli articoli che necessitano di tag
- 19. Differenza tra "test -a file" e "test file -ef file"
- 20. Hadoop che accetta i file di input da più directory
- 21. Lettura dal file di input
- 22. Domanda di base su Hadoop e file di input compressi
- 23. Dipende dal file make stesso
- 24. Le app PhoneGap necessitano di una connessione Internet?
- 25. Test delle unità Python: make nose show asserzioni valori
- 26. jQuery, selezionare Input FILE e impostarlo su un altro INPUT
- 27. Disabilita modifica regole e regole interne dall'interno del file make
- 28. Casi di test per gli input di stringa
- 29. Make Clojure riconosce e isola la linea in un file
- 30. dinamicamente creare elemento di input file di
I miei test sono in src/some/path e i file di dati si trovano nella stessa directory. Ho provato il trucco TESTS_ENVIRONMENT = cd $ (srcdir) && ma non ha funzionato perché ora non trova più il test eseguibile. Anche la copia dei file di dati richiesti nella directory corrente non funziona perché, in una build VPATH, apparentemente non si dispone delle autorizzazioni di scrittura per la directory in cui vengono eseguiti i test. –
@ Martin, non si ha accesso in scrittura alla directory di origine, ma si ha accesso in scrittura alla directory di build. Come stai copiando il file? Semplicemente aggiungendo 'EXTRA_DIST = datafile' a Makefile.am e' cp $ {srcdir}/datafile .' in test.in dovrebbe funzionare. Tuttavia, se il test è in esecuzione dalla directory di origine, il tentativo di copia fallirà a causa delle autorizzazioni di scrittura. Ho il sospetto che tu abbia alcuni test che vengono eseguiti dalla directory di build e alcuni che vengono eseguiti dalla directory di origine. (I test chiamati '* .in' sono (probabilmente) eseguiti dalla directory build, mentre altri test vengono eseguiti dalla directory di origine.) –
Questo sembrava esattamente quello che stavo cercando, ma questo non sembra funzionare con Automake 1.15, sfortunatamente: con questo crea file '* .log' e' * .trs' nella directory sorgente (che è già male), ma continua a cercarli nella directory di build e, naturalmente, non trova li là (che è fatale). –