2016-02-12 19 views
0

我試圖測試一個使用Maya scriptJobs的庫,並將它們重新分配爲Qt Signals。我遇到了一個問題,我無法測試信號是否正確地重新分配,因爲在Maya完成所有測試功能之後,Maya腳本工作站似乎不運行。如何控制Maya何時執行scriptJobs?

該測試將失敗,因爲在檢查call_count之前未調用處理程序。

from mock import Mock 
from maya import cmds 

def test_func(): 
    cmds.currentTime(1) 
    handler = Mock() 
    cmds.scriptJob(e=('timeChanged', handler)) 
    # This should trigger the scriptJob, and thus, call the handler 
    # but it doesn't until all python is finished executing. 
    cmds.currentTime(2) 
    assert handler.call_count == 1 

如果我定義了處理程序作爲一個全局變量,然後做一個兩步測試,讓我自己獨立運行test_one(),讓它完成,然後運行test_two(),它的工作原理。

handler = Mock() 
def test_one(): 
    cmds.currentTime(1) 
    cmds.scriptJob(e=('timeChanged', handler) 
    cmds.currentTime(2) 

def test_two(): 
    assert handler.call_count == 1 

反正是有強制瑪雅處理scriptJobs現在,而不是等到所有的蟒蛇執行完畢?或者,也許有更好的方法來測試呢?

回答

1

直到瑪雅主循環恢復,腳本完成後纔會處理scriptJobs。如果你希望它是同步的,你需要直接調用這些函數。您可以嘗試調用utils.processIdleEvents()來查看是否會強制scriptJobs在線啓動,但我不確定這是對您正在測試的任何內容的良好模擬。

+0

謝謝。是的,'processIdleEvents()'似乎沒有強制它,可能不得不重新考慮我如何測試它。 –

相關問題