2013-02-08 9 views

risposta

2

Aggiornamento: ZoneSpecification consente di ignorare la funzione print. Eseguendo il codice sotto test all'interno di una zona personalizzata è possibile acquisire chiamate alla funzione print. Ad esempio, il seguente test reindirizza tutti i messaggi di stampa in una lista in memoria log:

import 'dart:async'; 
import 'package:test/test.dart'; 

var log = []; 

main() { 
    test('override print', overridePrint(() { 
    print('hello world'); 
    expect(log, ['hello world']); 
    })); 
} 

overridePrint(testFn()) =>() { 
    var spec = new ZoneSpecification(
    print: (_, __, ___, String msg) { 
     // Add to log instead of printing to stdout 
     log.add(msg); 
    } 
); 
    return Zone.current.fork(specification: spec).run(testFn); 
}; 
+0

Puoi per favore aggiungere un codice di esempio che mostra la stampa prioritaria? –

+0

@SethLadd Fatto. – Yegor

5

Non credo unittest aggiunge nulla di specifico per questo, ma è possibile escludere qualsiasi funzione di primo livello nel campo di applicazione del test e la cattura chiamate a un registro, ad esempio:

var printLog = []; 
void print(String s) => printLog.add(s); 

main() { 
    test('print',() { 
    myFuncUnderTest(); 
    expect(printLog.length, 2); 
    expect(printLog[0], contains('hello')); 
    // etc... 
    }); 
} 
+0

Cool - Non ero a conoscenza di tale funzionalità - ho pensato che avevi bisogno di alias 'dardo: core' per ignorare top nucleo -le funzioni di livello. Questa soluzione funziona bene. –

+0

Grazie! Esattamente quello che stavo cercando. –

+0

Non appena ho spostato la funzione myFuncUnderTest in un'altra libreria, è stata richiamata la stampa normale e il test dell'unità non è riuscito. – richard

Problemi correlati