2017-06-15 1 views
4

ちょっとすべて私はテストしようとしているクラスメソッドを持っています.2つのパッチメソッド 'ConfigB'が必要です。 INIT 'と 'LISTDIR ConfigB.ConfigB 'しかし、それはありません':モックパッチを適用し、戻り値がのために働く、今os.listdirの模擬パッチがunittestingのために動かない

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) 

を:

from os import listdir 
from config.ConfigB import ConfigB 

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

私は、次のテストでは、設定しました' 'os.listdir'では動作しません。 print(listdir())メソッドが実行されるとき、パッチされた戻り値で指定されたとおり、現在のディレクトリのファイルのリストを取得します。どんな考えが間違っているのでしょうか?

答えて

5

コードへの相対パスを修正する必要があります。それを試してみてください

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

:あなたはこれにパッチを適用する必要があるためpatch('os.listdir')は動作しますしません。

+0

あなたのアバターは、画面上の髪の毛のように見えます。 – user2357112

+0

それはトリックです。 –

+0

はい、うまくいきました! @ mock.patch( 'os.listdir')を@ mock.patch( 'FileRunner.listdir')に更新し、期待値を返しています。 – EliSquared

関連する問題