2013-02-08 9 views

Odpowiedz

2

Aktualizacja: ZoneSpecification pozwala przesłonić funkcję print. Po uruchomieniu testu kodu w strefie niestandardowej można przechwytywać połączenia do funkcji print. Na przykład, następujący test przekierowuje wszystkie wiadomości drukowania na liście w pamięci 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

Czy możesz dodać przykładowy kod pokazujący nadpisanie wydruku? –

+0

@SethLadd Zrobione. – Yegor

5

Nie sądzę unittest dodaje nic konkretnego do tego, ale można zastąpić dowolną funkcję najwyższego poziomu w zakresie testu i przechwytywania wzywa do dziennika, na przykład:

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 - I nie był świadomy tej funkcjonalności - Myślałam, że potrzebne do aliasu 'dart: Podstawowe rozwiązania przesłonić rdzenia górę funkcje poziomu. To rozwiązanie działa dobrze. –

+0

Dzięki! Dokładnie to, czego szukałem. –

+0

Jak tylko przeniosłem funkcję myFuncUnderTest do innej biblioteki, wywołano normalny wydruk i test jednostkowy nie powiódł się. – richard

Powiązane problemy