嘿,所以我有一个类方法要测试,它需要两个修补过的方法,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)

现在,修补的mock和返回值适用于“configb.configb”,但不适用于“os.listdir”。当print(listdir())方法运行时,我得到当前目录中的文件列表,而不是修补返回值中指定的“none”值。知道怎么回事吗?

最佳答案

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

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

试试看。

07-26 09:19