2016-02-12 130 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()'似乎没有强制它,可能不得不重新考虑我如何测试它。 –