2011-08-30 4 views
3

비동기식으로 파일에 기록하는 로깅 모듈을 테스트하려고합니다 ... 단위 테스트는 기록 된 메시지가 예상과 일치하는지 확인하기 위해 로그를 읽으려고합니다. 그러나 단위 테스트가 끝날 때까지 모듈에 의한 비동기 쓰기가 파일에 도달하지 않는다는 것을 알았습니다. 심지어 임의의 시간 동안 파일을 기다리기 위해 잠든 경우에도 마찬가지입니다. aio_close 옆에 print 문을 추가하여 파일이 마지막까지 닫히지 않는지 확인했습니다. 이것을 시험하기 위해 무엇을 할 수 있습니까?perl에서 비동기 파일을 대기하는 방법

 #approximately the way this works: 
     aio_open($pathname, 
      $flags, 
      $mode, 
      sub 
      { 
       my $fh = shift; 
       aio_write($fh, 
          0, 
          length($log), 
          $log, 
          0, 
          sub 
          { 
           print "here"; 
           aio_close($fh, sub {}); 
          }); 
      }); 

답변

2

확인 해당 신호에 대한 신호 처리기 자고 단위 테스트 설정 ..

IO::AIO::flush; 

이렇게하면 내 테스트를 실행하기 전에 모든 비동기 버퍼가 플러시됩니다.

+0

멋진 것을 찾으십시오! +1 – DVK

+0

정확하지 않습니다. 'flush'는 보류중인 모든 비동기 액션이 완료 될 때까지 프로그램을 기다립니다. 귀하의 경우, 그것은'aio_close'를 실행하는 것을 포함하는데, 이것은 최종적으로 출력 버퍼를 없애는 것입니다. – mob

1

파일 작성자에게 콜백 "done_writing"하위를 허용하십시오.

제공된 경우 전화하십시오.

단위 테스트에서 터치 파일을 생성하거나 단순히 단위 테스트에서 "준비"플래그를 채우는 콜백을 제공하십시오. 대체 버전으로서

은 내가 부를 수 발견 콜백 문제에게 신호를 가지며, 비트의 주위 파고 데

+0

내가 자동으로 플러시하게하면 차단 될 것이므로 더 이상 비동기가되지 않을 것이라고 생각하십니까? 콜백에 대한 로거 수정을 고려했습니다 ... 그게 효과가 있다고 생각합니다. 나는 내가 추가 한 대답을 찾는 것을 끝내었다. – tbischel

관련 문제