Python模拟返回内部变量b

2024-04-26 00:49:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python编写一个脚本(myu脚本)的测试。在这个脚本的中途,熊猫数据帧作为csv保存到AWS。我不想每次运行此测试时都将一个文件保存到AWS,但我确实希望能够在稍后的测试中检查此数据帧的内容。是否可以覆盖我的脚本中的“save \u to \u csv”函数,以便此数据帧持续存在?我尝试编写一个简单的类来将数据帧存储为属性:

class FakeStorage(object):
    def __init__(self):
        self.dataframe = None
    def save_to_csv(self, df, file_path):
        self.dataframe = df
        print('df fake saved')


FAKE_STORAGE = FakeStorage()
import my_script
my_script.save_to_csv = FAKE_STORAGE.save_to_csv

我还尝试将dataframe持久化为一个全局变量:

def fake_save_to_csv(df, file_path):
    global DATAFRAME
    DATAFRAME = df
    print('df fake saved')

import my_script
my_script.save_to_csv = fake_save_to_csv

奇怪的是,在这两种情况下,我都看到了print语句,因此函数似乎已经被成功覆盖。但是,在测试中运行了我的\u脚本之后,在第一种情况下,我尝试访问FAKE_存储.dataframe在第二种情况下,尝试访问DATAFRAME会抛出一个nameferror。你知道吗

有没有人有别的想法可以试试?你知道吗


Tags: csvto数据self脚本dataframedfmy
1条回答
网友
1楼 · 发布于 2024-04-26 00:49:56

我想这样行得通。设置可存储数据帧的全局变量。调用函数时使用副作用保存数据帧。你知道吗

import unittest
df = None. # global variable

class GlobalTestCase(unittest.TestCase):

    @unittest.mock.patch('script.save_to_csv')
    def test_aws_pull(self, mock_save_to_csv):
        mock_save_to_csv.side_effect = lambda x: df=x  # able to set global variable
        call_script()
        assert mock_save_to_csv.called  # test to see if used. you want to replace with what youd like tested

    def test_df(self):
        expected_df = 'what you expect the df to be'
        assert expected_df == df  # using thr gloval variable in the next test

其他可能的解决方案包括在同一个测试函数中测试dataframe,将dataframe保存为类变量而不是全局变量,将dataframe保存为单独类中的设置函数,或者使用pytest创建dataframe fixture。你知道吗

相关问题 更多 >