2011-05-04 3 views
0

Silverlight에 대한 유닛 테스트를 생성 할 때 테스트 프레임 워크에는 비동기 호출을 지원하지만 테스트 메소드 내에서만 빌드 할 수있는 기능이있는 것 같습니다. 거기에서 호출하고있는 자식 메서드에서 비동기 호출이 있으면 어떻게할까요?Silverlight 유닛 테스팅, 중첩 된 메소드의 비동기 호출 처리

예를 들어 Specflow를 사용하여 ViewModel을 테스트하는 경우 명령의 Execute 메서드를 호출하고 해당 명령이 비동기 적으로 웹 서비스를 호출하려고합니다. 결과를 주장하기 전에 while 명령이 완료되었는지 어떻게 확인할 수 있습니까?

를 예로 들어이 내가 전체 명령을 계속하기 전에 완료 될 때까지 기다릴 필요가 명령

[Asynchronous] 
    [When(@"I press calculate")] 
    public void WhenIPressCalculate() 
    { 
     _helloWorldViewModel.CalculateCommand.Execute(null); 
    } 

입니다.

+0

비동기 호출이 WCF 서비스와 관련된 경우 메서드 호출에 지연이없는 모의 서비스를 만들 수 있습니다. 단위 테스트를 완료하는 데 시간이 많이 걸리지 않아야하기 때문에 더 나은 방법입니다. – vorrtex

+0

실제로 기능 블록 (Behavior Driven Development)을 테스트하고 있으므로 실제 서비스를 호출하는 것이 좋습니다. 그렇게함으로써 우리는이 기능이 완전히 작동하는지 확인할 수 있습니다. – Nitro52

답변

0

실행이 종료 된 종료 조건으로 같은 방법으로 루프를 만듭니다.

0

콜백이 UI 스레드에 정렬되어 있기 때문에 루프가 작동하지 않습니다. 조건에 대해 루프가 발생하면 콜백이 스레드가 완료 될 때까지 대기 중일 때 교착 상태가 발생합니다.

어쨌든 우리는이 문제를 외면했습니다. specflow 친구들이 동시에이 작업을 진행하고 있고 해결책을 찾았습니다. 사전 릴리스 빌드로 작업하게했습니다.

나는 이것이 사전 릴리스 빌드로 이루어졌다으로이 희망 나는 그것이 않는 경우를 업데이트 할 시간을 얻을 것이다, 변경 될 수 있습니다 여기 http://rburnham.wordpress.com/2011/05/13/testing-silverlight-asynchronous-code-with-specflow/

그것에 대해 블로그 항목을 썼다.

관련 문제