2014-02-14 38 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) 

當我添加並運行下面的代碼時,字符串確實被打印出來。

loop.run() 

任何想法是什麼錯?

回答

0

按照API documentation for g_main_context_pending,它

檢查是否有任何來源任何關於給定上下文的事件。

您的超時源在100ms過後纔會有任何未決事件。在此之前,它只會有一個沒有懸而未決事件的來源。

+0

有沒有辦法來檢測在給定時間在源中是否有未決事件?否則,它會使測試代碼依賴於調度程序,除非您真正運行調度程序! – Sardathrion

+0

不是我所知道的。超時不是唯一的事件源 - 它們可能不是最常見的事件源,並且不可能知道除超時源以外的任何其他事物是否將在未來的某個時刻發生未決事件。即使超時也不是很精確......我不明白如何在沒有運行循環的情況下對其進行有效的測試,並且我不能想到不運行它的好理由。 – nemequ