如何将文件传递给 unittest.mock.mock_open()?

我有一个读取日志文件和过滤结果的函数,我想测试以确保它正确过滤。


我的代码


import os

import random

import unittest

from unittest.mock import patch, mock_open


__SAMPLE_LOG__ = os.path.join(settings.BASE_DIR, "apps/tests/log_viewer/sample_logs/sample_manager_log.log")


class FilterLog(unittest.TestCase):


    def setUp(self):

        with open(__SAMPLE_LOG__) as f:

            self.sample_data = f.read()


    @patch('builtins.open', new_callable = mock_open, read_data = self.sample_data)

    def test_filterDate(self, mock_file):

        

        day = '08'

        month = '08'

        year = '2019'

        results = filter_log(filter_by = 'date', day = day, month = month, year = year)


        self.assertEqual(open(settings.ACTIVITY_LOG_FILE).read(), self.sample_data)


错误


@patch('builtins.open', new_callable = mock_open, read_data = self.sample_data)


NameError:名称“自我”未定义



我的问题


我应该如何将数据传递到mock_open()?我觉得with open() ... read()在文件顶部有一个不好的做法,我也不能把它作为一个类变量(可以吗?),那么我有什么选择呢?



文件说什么


从文档 read_data中获取一个字符串,所以我需要以某种方式将文件读入一个变量并将其传入。但是在哪里读取文件合适?在模块的顶部,在课程的开头,还是在setUp()?


炎炎设计
浏览 111回答 1
1回答

侃侃无极

这应该有效。我把 sample_data 带出了课堂。import osimport randomimport unittestfrom unittest.mock import patch, mock_open__SAMPLE_LOG__ = os.path.join(settings.BASE_DIR, "apps/tests/log_viewer/sample_logs/sample_manager_log.log")# read your test data in sample_datawith open(__SAMPLE_LOG__) as f:    sample_data = f.read()class FilterLog(unittest.TestCase):    @patch('builtins.open', new_callable = mock_open, read_data = sample_data)    def test_filterDate(self, mock_file):        day = '08'        month = '08'        year = '2019'        results = filter_log(filter_by = 'date', day = day, month = month, year = year)        self.assertEqual(open(settings.ACTIVITY_LOG_FILE).read(), sample_data)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python