2012-02-12 10 views
24

Cerco un modulo perl per convertire l'output CppUnit nel formato TAP. Voglio utilizzare il comando per provare in seguito per eseguire e controllare i test.Uscita CppUnita al convertitore di formato TAP

+16

Io non so nulla di lavorare, ma CppUnit sembra utilizzare l'uscita JUnit XML. Potresti avere più fortuna alla ricerca di un convertitore JUnit-to-TAP. Altrimenti la soluzione migliore potrebbe essere scrivere un [plugin CppUnit] (http://cppunit.sourceforge.net/doc/lastest/class_plug_in_manager.html) che emette direttamente TAP piuttosto che eseguire una conversione. – Schwern

+1

Si dovrebbe guardare TAP :: Harness :: JUnit, il suo codice può aiutare a scrivere il convertitore inverso (che non sembra esistere). –

risposta

2

Recentemente stavo facendo un po 'di conversione da junit xml (non al formato TAP). È stato molto semplice utilizzare il modulo XML :: Twig. codice si dovrebbe guardare in questo modo:

use XML::Twig; 

my %hash; 

my $twig = XML::Twig->new(
    twig_handlers => { 
     testcase => sub { # this gets called per each testcase in XML 
      my ($t, $e) = @_; 
      my $testcase = $e->att("name"); 
      my $error = $e->field("error") || $e->field("failure"); 
      my $ok = defined $error ? "not ok" : "ok"; 
      # you may want to collect 
      # testcase name, result, error message, etc into hash 
      $hash{$testcase}{result} = $ok; 
      $hash{$testcase}{error} = $error; 
      # ... 
     } 
    } 
); 
$twig->parsefile("test.xml"); 
$twig->purge(); 

# Now XML processing is done, print hash out in TAP format: 
print "1..", scalar(keys(%hash)), "\n"; 
foreach my $testcase (keys %hash) { 
    # print out testcase result using info from hash 
    # don't forget to add leading space for errors 
    # ... 
} 

Questo dovrebbe essere relativamente facile da lucidare in stato