Ci sono dei framework di test delle unità indipendenti dalla lingua? [chiuso]

10

Sono sempre stato scettico sulla riscrittura del codice di lavoro: il porting del codice non fa eccezione. Tuttavia, con l'avvento di TDD e test automatici è molto più ragionevole riscrivere e codice refactoring.

Qualcuno sa se esiste uno strumento TDD che può essere utilizzato per il porting del vecchio codice? Idealmente potresti fare quanto segue:

  1. scrivi i test delle unità indipendenti dalla lingua per il vecchio codice che passa (o fallisci se trovi bug!).
  2. Esegui test di unità sull'altro tuo codice base che falliscono.
  3. Scrivi il codice nella tua nuova lingua che supera i test senza guardare il vecchio codice.

L'alternativa sarebbe quella di suddividere il passaggio 1 in "Scrivi test di unità nella lingua 1" e "Porta test di unità nella lingua 2", il che aumenta in modo significativo lo sforzo richiesto ed è difficile da giustificare se il vecchio codice base si fermerà mantenuta dopo la porta (ovvero, non si ottiene il vantaggio dell'integrazione continua su questo codice).

EDIT: Vale la pena notare questa domanda su StackOverflow.

    
posta Bringer128 18.11.2011 - 04:42
fonte

5 risposte

6

Non penso sia possibile scrivere test unitari in una lingua diversa.

Tuttavia, ciò che puoi fare è scrivere i test di integrazione / accettazione / interfaccia utente / whaterver_you_name_it che sarebbero di altissimo livello e non sarebbero legati alla lingua con cui è stato scritto il software.

Se la tua applicazione è un servizio web, puoi testarlo con qualsiasi lingua desideri, a patto che supporti il tuo protocollo. Se l'applicazione viene eseguita in un browser, è possibile utilizzare selenio (è il primo che mi è venuto in mente, ma ce ne sono altri. Eccetera. Potrebbero esserci alcuni casi in cui non funzionerebbe immagino (forse hardware), tutto dipende dal tipo di applicazione su cui stai lavorando.

Ovviamente, non avrai la stessa copertura che avresti con i test a livello di unità (a meno che tu non spenda molto tempo), ma almeno avresti un cablaggio di prova.

    
risposta data 18.11.2011 - 09:39
fonte
2

Penso che ciò che più si avvicina alla tua idea sono i framework unit test su ecosistemi basati su macchine virtuali come la VM Java. Almeno Scala (e credo che anche Groovy - non sono abbastanza sicuro di Clojure) è quasi perfettamente interoperabile con Java. Cioè, il codice Scala può essere testato con JUnit e il codice Java può essere testato con ScalaTest. In questo modo è possibile (gradualmente o contemporaneamente) riscrivere il codice Java in Scala e continuare a utilizzare gli stessi vecchi test dell'unità Java per verificarne la correttezza. (O al contrario - anche se non riesco a immaginare un valido motivo per migrare da Scala a Java.)

Probabilmente lo stesso è vero per le lingue sulla CLI .NET, ad es. C #, F #, ASP.NET et al.

Al di fuori di una VM / CLR, tuttavia, è più difficile. In teoria, si potevano compilare test unitari e / o codice sotto test in un'altra lingua come C (come era ed è comune con nuovi linguaggi come C ++, ecc.), Ma non ho sentito nessuno che abbia provato questo in particolare con test unitari.

    
risposta data 18.11.2011 - 09:43
fonte
1

Tale framework non esiste, perché deve essere scritto nella lingua del codice che viene utilizzato.

Ad esempio, un framework per testare il codice c ++ deve essere scritto in c o c ++. Usare framework scritto in c ++ potrebbe, ma non testerà un codice c se usa le funzionalità di c ++.

    
risposta data 18.11.2011 - 09:24
fonte
1

Le metodologie variano, ma nel mio caso una grande parte dei miei test TDD tende allo stile 'test di integrazione', al contrario di 'unit test'. Cioè, molti dei miei testano l'intero programma in query quasi reali, controllando le risposte appropriate.

In alcuni casi, quando ho scritto programmi guidati dalla rete (per lo più protocolli specifici dell'applicazione), non avevo a portata di mano un quadro di test completo che fosse facile per il lavoro, quindi ho eseguito la maggior parte dei test in tutta la rete ', in breve, ho scritto un client molto semplice in un'altra lingua con un framework di test comune e semplice, e la maggior parte dei test ha controllato le risposte del server.

Tuttavia, anche in questi casi, ho iniettato alcuni test arrotolati a mano nella vera applicazione per testare alcune parti non di rete.

    
risposta data 19.11.2011 - 17:16
fonte
-1

Il framework di test agnostico linguistico è un framework di test generico adatto al test di accettazione (punto di vista) e i test in tale framework sono gestiti da QA ad esempio, Robotframework

    
risposta data 13.10.2014 - 14:39
fonte

Leggi altre domande sui tag