模拟的os.listdir补丁不适用于单元测试

时间:2017-06-15 16:22:31

标签: python unit-testing mocking patch

嘿所有,所以我有一个我试图测试的类方法需要两个修补方法,' ConfigB。 init '和' listdir':

from os import listdir
from config.ConfigB import ConfigB

class FileRunner(object):
  def runProcess(self, cfgA)
    cfgB = ConfigB(cfgA)
    print(listdir())

我有以下测试设置:

import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner

class TestFileRunner(unittest.TestCase):
  @mock.patch('ConfigB.ConfigB.__init__')
  @mock.patch('os.listdir')
  def test_methodscalled(self, osListDir, cfgB):

    cfgA = MagicMock()
    fileRunner = FileRunner()

    cfgB.return_value = None
    osListDir.return_value = None

    fileRunner.runProcess(cfgA)

现在,修补的模拟和返回值适用于' ConfigB.ConfigB',但它不适用于' os.listdir'。当print(listdir())方法运行时,我得到当前目录中的文件列表,而不是' None'正如我在修补后的返回值中指定的那样。知道出了什么问题吗?

1 个答案:

答案 0 :(得分:5)

您需要修补代码的相对路径。 patch('os.listdir')无效,因为您需要修补此问题:

@mock.patch("path.to.your.pythonfile.listdir")

尝试一下。