为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2022-04-27 13:28:06
我有一个读取日志文件和过滤结果的函数,我想测试以确保它正确过滤。我的代码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")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()?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

这应该有效。我把 sample_data 带出了课堂。


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")


# read your test data in sample_data

with 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)


查看完整回答
反对 回复 2022-04-27
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号