2017-06-15 79 views
4

嘿,所以我有一個類方法,我試圖測試,需要兩個修補方法,'ConfigB。 INIT「和 'listdir同時':os.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'值。任何想法出了什麼問題?

回答

5

你需要修補你的相對路徑到你的代碼。 patch('os.listdir')不起作用,因爲你需要補丁:

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

試一下。

+0

你的頭像看起來像我想要刷的屏幕上的頭髮。 – user2357112

+0

這就是訣竅。 –

+0

是的,工作!我將@ mock.patch('os.listdir')更新爲@ mock.patch('FileRunner.listdir'),並返回預期值。 – EliSquared

相關問題