簡體   English   中英

如何將文件傳遞到unittest.mock.mock_open()?

[英]How can I pass a file to 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 =模擬打開,read_data = self.sample_data)

NameError:名稱“ self”未定義


我的問題

我應該如何將數據傳遞給mock_open() 我覺得在文件頂部with open() ... read()是一種不好的做法,也不能將其設置為類變量(可以嗎?),那我有什么選擇呢?


文件說什么

文檔中 read_data接受一個字符串,因此我需要以某種方式將文件讀取到一個變量中並傳遞給它。但是讀取文件在哪里合適呢? 在模塊的頂部,在類的開頭,還是在setUp()

這應該工作。 我將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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM