2015-06-19 51 views
2

所以我刚开始使用模拟库来执行一些单元测试。但碰到了一个对我来说确实很神秘的问题。布尔函数的Python嘲弄

当我调用下面的代码时,stream.open()总是计算为True,因为它似乎是返回Mock对象而不是False值。

测试代码

@patch('module.lib.stream') 
def test_error_raised(self, mock_stream): 
    mock_stream.open.return_value = False 
    self.assertRaises(IOError, get_query, 618) 

被调用函数

def get_query(id): 
    id = str(id) 
    fpath = os.path.join(
     path, '{0}.pdf'.format(id)) 
    stream = stream() 
    if not stream.open(fpath): 
     raise IOError("No file found") 
    list = map(foo, stream.GetData()) 
    first_entry = list[0] 
    target_entries = list[1:] 
    return first_entry, target_entries 

是否有办法妥善嘲笑这个功能呢?

回答

1

从你的功能来看,stream似乎是一个类。

由于您创建了该类的实例,然后您在该实例上调用了open方法,因此您需要在测试函数中执行mock_stream.return_value.open.return_value = False

+0

这正是我的问题。非常感谢 – badisa