2014-02-14 4 views
0

일부 스케줄러 호출을 단위 테스트하려고합니다. 나중에 콜백을 호출해야하는 타임 아웃을 생성합니다. 그러나 테스트에서 스케줄러를 시작하고 중지하고 싶지는 않습니다. 그래서, 나는 이것에 영리하게 main_context.pending()을 사용할 수 있다고 생각했습니다. 그러나 제대로 작동하지 않는 것 같습니다.단위 테스트의 glib 스케줄러

import glib 
import gobject 

def ook(): 
    print('Stup!d monkey') 
    return False 

loop = gobject.MainLoop() 
glib.timeout_add(100, ook) 

아래 코드를 추가하고 실행하면 아무 것도 인쇄되지 않습니다.

main_context = glib.MainLoop.get_context(loop) 
while main_context.pending(): 
    main_context.iteration(False) 

아래 코드를 추가하고 실행하면 실제로 문자열이 인쇄됩니다.

어떤 아이디어가 잘못 되었나요?

답변

0

API documentation for g_main_context_pending에 따르면,

확인 어떤 소스가 지정된 컨텍스트에 대한 이벤트를 보류 한 경우.

시간 초과 원본에는 100ms가 경과 할 때까지 대기 이벤트가 없습니다. 그때까지는 보류중인 이벤트가없는 소스 만 있습니다.

+0

주어진 시간에 소스에 보류중인 이벤트가 있는지를 감지하는 방법이 있습니까? 그렇지 않으면 실제 스케줄러를 실행하지 않으면 스케줄러에 의존하는 코드를 테스트 할 수 없습니다! – Sardathrion

+0

나는 알고있다. 타임 아웃 만이 유일한 이벤트 소스가 아니며 가장 일반적인 이벤트 소스가 아닙니다. 타임 아웃 소스 이외의 다른 이벤트가 앞으로 어떤 이벤트에서 보류 중인지 여부를 아는 것은 불가능합니다. 시간 초과가 있더라도 실제로 정확하지는 않습니다 ... 루프를 실행하지 않고 유용하게 테스트 할 수있는 방법을 알지 못합니다. 실행하지 않을 좋은 이유를 생각할 수 없습니다. – nemequ

관련 문제