2009-10-05 2 views
1

일부 작업을 비동기 적으로 실행하는 클래스에서 작동하는 단위 테스트가 많이 있습니다. 현재 클래스를 설정 한 다음 문제의 함수를 실행합니다. 그런 다음 실행이 완료 될 때까지 차단 대기로 이동 한 다음 필요한 데이터를 테스트합니다. 내가 할 수있는 더 좋은 방법이 있니?비동기 실행을 사용하는 클래스 테스트

지금까지 내 테스트는 여기에 유사 :

vp.Reset(); //vp is my virtual machine 
    bool wait = true; 
    Dictionary<short, Command> commands = new Dictionary<short, Command>(); 
    commands.Add(0, CommandFactory.CreateInputCommand(0, 0)); 
    commands.Add(1, CommandFactory.CreateHaltCommand()); 
    vp.OnHalted +=() => 
    { 
     wait = false; 
    }; 
    vp.InputChannels[0] =() => { return 2; }; 
    vp.CurrentProgram = commands; 
    vp.ExecuteTillHalt();//asynchronous execution of program. There's also a way to make it execute synchronously 
    while (wait) ; 
    Assert.AreEqual(vp.Registers[0], 2); 

답변

2

내가 두 asychronous 액션이 (모의 함께 할 수있는) 시작하는지 테스트하는 시험 한 것을 테스트하는 두 번째 참조 비 동시성으로 실행되는 동작은 실행할 때 올바르게 수행되며 후자를 동 기적으로 수행 할 수 있습니다.

+0

어떤 일이 발생합니까? 반복 타이머를 통해 비동기 적으로 코드를 실행하는 가상 프로세서가 있으며 실행이 완료되면 해제됩니다. 간단한 프로그램을 작성하고 가상 컴퓨터를 한 번에 하나씩로드 한 다음 비동기 실행을 실행하고 결과를 테스트하여 내 프로세서 세트의 특정 측면을 테스트하고 있습니다. 나는 그것이 synchronusly 실행하고 별도의 테스트로 asynchronus 부분 밖으로 분리 강제로 수도 ... – RCIX

+0

그건 당신의 타이밍 루프가 당신의 구성을 변경 (일종의)에 의해 변경되어야하므로 귀하의 테스트 속도를 것입니다. –

0

두 가지 테스트로 나누는 방법이 있습니까?

블록을 통해 비동기식 측면을 테스트 한 다음 데이터를 호출하는 방식에 의존하지 않는 별도의 테스트 가능한 기능으로 데이터를 테스트 할 수 있습니다.

관련 문제