模拟python3时会抛出断言错误

时间:2016-07-31 20:45:46

标签: python unit-testing mocking

我正在尝试编写一个测试,在尝试打开文件进行阅读时,在调用PermissionError时模仿open()。但是我似乎无法让测试工作。 PermissionError似乎被抛出,但我的测试因此而失败,即使我试图断言它被抛出。

下面是我的一次尝试:

fileMethods.py

def readfile(myfile):
    with open(myfile, 'r') as file:
        filecontent = file.read()
    file.close()
    return filecontent

fileMethods_test.py

def test_readfile_throws_PermissionError(self):
    with mock.patch('fileMethods.open') as openMock:
        openMock.side_effect = PermissionError
        self.assertRaises(PermissionError, fileMethods.readfile('file_to_readin'))

我错过了一些明显的东西,或者我测试此方法的方式不正确?

1 个答案:

答案 0 :(得分:0)

这不起作用的原因是因为您正在嘲笑fileMethods.open,因此open函数(提升您正在寻找的PermissionError)甚至都没有被调用。

如果open函数被模拟(因此,被调用函数将不执行任何操作),则无法断言该函数引发的异常被调用。

它的工作方式是,当你模拟一个函数时,默认情况下它不会做任何事情。查看文档here,这将进一步深入解释。