2017-02-20 24 views
0

У меня есть функция, которая сначала проверяет, существует ли файл txt, и если он его не создает. Если файл txt уже существует, он считывает информацию. Я пытаюсь написать unittests, чтобы проверить, правильна ли логика функции. Я хочу исправлять такие вещи, как наличие файлов, создание файлов и чтение файлов. Функция, которая должна быть проверена выглядит следующим образом:Как издеваться над созданием текстовых файлов 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 [] 

UnitTest выглядит следующим образом:

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, [])) 

ОШИБКА: ImportError: Импорт по имени файла не поддерживается.

или как это:

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, {})) 

ОШИБКА: IOError: [Errno 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):