2017-07-10 13 views
0

私のPythonアプリケーションから関数をテストしたいと思います。コードは次のようになります。テストされた関数内のオブジェクトによって使用される組み込み関数モックを作成する方法

import unittest 
from unittest.mock import patch 
from mock import MagicMock 
import configparser 


def read_config_sections(filename): 
    cp = configparser.ConfigParser() 
    cp.read(filename) 
    sections = list() 

    for section in cp.sections(): 
     sections.append(section) 
    return sections 


class TestReadConfigSection(unittest.TestCase): 
    @patch("__main__.open", MagicMock(return_value="[SECTION1]")) 
    def test_read_config_sections(self): 
     sections = read_config_sections("somename.ini") 
     self.assertEqual(["SECTION1"], sections) 

if "__main__" == __name__: 
    unittest.main() 

は、私が設定を読み込むためにConfigParserの方法によって使用されるopen機能をモックとしたいです。誰かが私にどのようにうまくそれを伝えることができる?上のコードを実行すると、変数sectionsは空のリストになります。

また、この機能のテスト方法がわかりましたか?

+0

代わりに__main__.open私はbuiltins.openを使用する必要がありますが、私はそれが例外ですAttributeError:__exit__ –

答えて

0

私はあなたが代わりmock_open機能を使用することができ__builtins__.openではなく__main__.open

をしたいと考えています。

+0

__builtins__.openを使用するとエラーが発生しました ImportError: '__builtins__' –

1
import configparser 
import io 
from mock import patch, mock_open 
import unittest 


def read_config_sections(filename): 
    cp = configparser.ConfigParser() 
    cp.read(filename) 
    sections = list() 
    for section in cp.sections(): 
     sections.append(section) 
    return sections 


class TestReadConfigSection(unittest.TestCase): 
    @patch("builtins.open", return_value=io.StringIO("[SECTION1]")) 
    def test_read_config_sections(self, mock_open): 
     sections = read_config_sections("somename.ini") 
     self.assertEqual(sections, ["SECTION1"]) 


if "__main__" == __name__: 
    unittest.main() 

ソリューションは、ここで見つける:助けをhttps://mapleoin.github.io/perma/mocking-python-file-open

感謝を。

よろしくお願いいたします。

関連する問題