【问题标题】:Mocked patch of os.listdir not working for unittestingos.listdir 的 Mocker 补丁不适用于单元测试
【发布时间】:2017-11-18 05:47:56
【问题描述】:

我有一个要测试的类方法,它需要两个修补方法,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 值。知道出了什么问题吗?

【问题讨论】:

    标签: python unit-testing mocking patch


    【解决方案1】:

    您需要修补代码的相对路径。 patch('os.listdir') 不起作用,因为您需要对此进行修补:

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

    试试看。

    【讨论】:

    • 是的,有效!我将@mock.patch('os.listdir') 更新为@mock.patch('FileRunner.listdir') 并返回预期值。
    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2017-11-15
    • 2015-05-21
    • 2020-01-15
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多