2017-02-20 75 views
0

我有一個函數,首先檢查一個txt文件是否存在,如果它沒有創建一個。如果txt文件已經存在,它會讀取信息。我正在嘗試編寫單元測試來檢查函數的邏輯是否正確。我想修補文件的存在,文件的創建和文件的讀取。 的功能進行測試看起來是這樣的:如何在unitest框架中模擬創建文本文件python2.7?

import json 
import os.path 

def read_create_file(): 

    filename = 'directory/filename.txt' 
    info_from_file = [] 

    if os.path.exists(filename): 

     with open(filename, 'r') as f: 
      content = f.readlines() 
      for i in range(len(content)): 
       info_from_file.append(json.loads(content[i])) 
     return info_from_file 

    else: 
     with open(filename, 'w') as f: 
      pass 

     return [] 

的單元測試是這樣的:

import unittest 
import mock 
from mock import patch 


class TestReadCreateFile(unittest.TestCase): 

    def setUp(self): 
     pass 

    def function(self): 
     return read_create_file() 

    @patch("os.path.exists", return_value=False) 
    @mock.patch('directory/filename.txt.open', new=mock.mock_open()) 
    def test_file_does_not_exist(self, mock_existence, mock_open_patch): 
     result = self.function() 
     self.assertEqual(result, (True, [])) 

錯誤:導入錯誤:不支持按文件名導入。

或像這樣:

import unittest 
import mock 
from mock import patch 

@patch("os.path.exists", return_value=False) 
def test_file_not_exist_yet(self, mock_existence): 
    m = mock.mock_open() 
    with patch('__main__.open', m, create=True): 
     handle = open('directory/filename.txt', 'w') 
    result = self.function() 

    self.assertEqual(result, (True, {})) 

錯誤: IO錯誤:[錯誤2]沒有這樣的文件或目錄: '目錄/ FILENAME.TXT'

作爲一個新手,我似乎無法讓我的頭繞解決方案,任何幫助,不勝感激。

謝謝

回答

0

你嘲笑os.path.exists錯誤。當你從被測文件中修補你的補丁時。

@patch("path_to_method_under_test.path.exists", return_value=False) 
def test_file_not_exist_yet(self, mock_existence):