2014-06-04 2 views
2

이것은 단위 테스트 스트림을 시도 할 때 발생하는 매우 간단한 버전의 문제입니다.스트림 이벤트 시간 초과 다트 유닛 테스트

테스트에서 올바른 이벤트가 스트림에 추가되었는지 확인합니다. 예를 들어 add('test') 값을 add('test2')으로 변경하면 테스트가 실패합니다.

그러나 이벤트가 발생하지 않도록 라인 fireKeepAliveMessage(message);을 주석 처리하면 단위 테스트가 단순히 계속 실행됩니다.

테스트에 일종의 시간 초과를 추가하려면 어떻게해야합니까? 아니면이 문제에 대한 더 나은 접근법이 있습니까?

library stream_test; 

import "package:unittest/unittest.dart"; 
import "dart:async"; 

void main() { 
    test("aa",() { 
    StreamController streamController = new StreamController(); 

    streamController.add("test"); 
    Stream underTest = streamController.stream; 

    underTest.first.then(expectAsync((e){ 
     expect(e, equals("test")); 
    })); 
}); 
} 

답변

0

스트림 클래스는이에 대한 방법이있다.

Stream timeout(Duration timeLimit, {Function void onTimeout(EventSinksink)}) 

이 스트림과 같은 이벤트로 새로운 스트림을 작성합니다.

이 스트림의 두 이벤트간에 timeLimit 이상이 전달 될 때마다 onTimeout 함수가 호출됩니다.

반환 된 스트림을 청취 할 때까지 카운트 다운이 시작되지 않습니다. 이 스트림에서 이벤트가 전달 될 때마다 또는 스트림이 일시 중지되었다가 다시 시작될 때마다 카운트 다운이 재설정됩니다.

onTimeout 기능은 하나 개의 인자로 호출됩니다 반환 스트림에 이벤트를 넣어 수있는 다트 - async.EventSink. 이 EventSink는 onTimeout 호출 중에 만 유효합니다.

onTimeout을 생략하면 타임 아웃은 스트림의 오류 채널에 dart-async.TimeoutException을 넣습니다.

이 스트림이있는 경우에도 반환 된 스트림은 브로드 캐스트 스트림이 아닙니다.

1

나는 그것을 좋아 할 것 :

library stream_test; 

import "package:unittest/unittest.dart"; 
import "dart:async"; 

void main() { 
    test("aa",() { 
    StreamController streamController = new StreamController(); 

    Timer t; 

    Stream underTest = streamController.stream; 
    underTest.first.then(expectAsync((e) { 
     expect(e, equals("test")); 
     if (t != null) { 
     t.cancel(); 
     } 
    })); 

    t = new Timer(new Duration(seconds: 3),() { 
     fail('event not fired in time'); 
    }); 

    streamController.add("test"); 
    }); 
} 
+1

감사 군터을. 항상 당신이 단위 테스트 비동기 코드 내 탐구에 나를 도울 구조에 타고 와서 :) – richard

관련 문제