Come posso usare il test di Perl :: :: profonda cmp_deeply senza aumentare il numero di test?

StackOverflow https://stackoverflow.com/questions/1274756

  •  16-09-2019
  •  | 
  •  

Domanda

Si presenta come Test::Deep è stato ispirato da is_deeply . La mia domanda è come faccio a fare parte cmp_deeply di un test, invece di una prova di per sé? Perché il mio elenco delle prove afferma solo l'8, ma ogni volta che lo uso cmp_deeply, conta come un test, rendendo il mio numero effettivo di test 11 (perché io chiamo cmp_deeply 3 volte), quando ho solo 8 funzioni. Non voglio per aumentare il numero dei miei test. C'è una soluzione più praticabile?

È stato utile?

Soluzione

Si dovrebbe usare eq_deeply invece:

  

Questa è la stessa di cmp_deeply()   eccetto che restituisce solo vero o falso.   Non crea la diagnostica ...

Altri suggerimenti

Ci sono una serie di cose che potete fare, ma senza sapere di più delle specifiche nei test è difficile sapere quale è la più appropriata:

  • Non avete in programma per un numero specifico di test.

    use Test::More;
    
    all(
        cmp_deeply($got0, $expected0),
        cmp_deeply($got1, $expected1),
        cmp_deeply($got2, $expected2)
       );
    
    # ... your other 7 tests
    done_testing();  # signals that we're all done.. exiting normally.
    
  • dinamicamente determinare quanti test sono in esecuzione, che ha un senso se si sta testando qualche struttura profonda e dinamica la cui complessità (e il numero di test richiesti) non è noto in anticipo:

    use Test::More;
    use Test::Deep;
    
    # perhaps this is in some sort of loop?
    cmp_deeply($got0, $expected0);  $numTests++;
    cmp_deeply($got1, $expected1);  $numTests++;
    cmp_deeply($got2, $expected2);  $numTests++;
    
    # ... your other 7 tests
    
    # TAP output must be either at the beginning or end of all output
    plan tests => $numTests + 7;
    
    # no more tests here!
    exit;
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top