Python 使用pytest对pickle文件进行单元测试的正确方法是什么?

Python 使用pytest对pickle文件进行单元测试的正确方法是什么?,python,python-3.x,unit-testing,pickle,python-unittest,Python,Python 3.x,Unit Testing,Pickle,Python Unittest,我已经为我的项目中的一个函数编写了一个单元测试用例,它专门打开一个pickle文件-转储,然后关闭它。 以下是函数:-app.py def data_serialization(): global dlp_instance file_pi = open('App-backup.pickle', "wb") pickle.dump(dlp_instance, file_pi) file_pi.close() 这是我写在函数中的单元测试用例。:-

我已经为我的项目中的一个函数编写了一个单元测试用例,它专门打开一个pickle文件-转储,然后关闭它。 以下是函数:-app.py

def data_serialization():
    global dlp_instance
    file_pi = open('App-backup.pickle', "wb")
    pickle.dump(dlp_instance, file_pi)
    file_pi.close()
这是我写在函数中的单元测试用例。:-test\u app.py

class TestDlp(unittest.TestCase):
    def setUp(self):
        application.testing = True
        self.client = application.test_client()
    
    def test_data_serialization(self):
        from dlp.dlp import data_serialization
        read_data = pickle.dumps({'a': 1, 'b': 2, 'c': 3})
        mock_open = mock.mock_open(read_data=read_data)
        with patch('dlp.dlp.data_serialization', mock_open):
            obj = data_serialization()
        self.assertFalse(obj)
        self.assertNotEqual({'a': 1, 'b': 2, 'c': 3}, obj)
测试用例成功运行。除此之外,我还参考以下内容编写了一个辅助测试用例:

然而,这个测试用例给了我一个属性错误,指出“FlaskClient”对象没有属性“save”

那么,在这个场景中,为pickle文件编写单元测试用例的正确方法是什么

编辑:-由于上述两个测试用例实际上不正确,所以我尝试了以下内容

@mock.patch("builtins.open")
    def test_data_cerial(self, mock_open):
        from dlp.dlp import data_serialization
        data_serialization()
        self.assertEqual(mock_open.call_count, 1)

这会成功运行。

为什么
FlaskClient
对象会有
.save()
函数?你为什么这么叫它?@AKX,我也这么认为。成功通过的单元测试用例是否正确?或者有其他正确的编写方法吗?好吧,如果我读对了,你基本上是在完全替换
data\u serialization()
函数,所以你没有测试它。查看该函数的测试覆盖率并进行测试,以确保您测试的内容正确。@AKX您是对的!该功能未被测试。你能帮我多了解一点我该如何正确地写吗。我已经不确定它是否正确,现在它没有进行测试,这让事情对我来说变得更加复杂。你可能需要一些带有补丁的
('app.open',mock.mock_open(…):
来模拟开放调用。
@mock.patch("builtins.open")
    def test_data_cerial(self, mock_open):
        from dlp.dlp import data_serialization
        data_serialization()
        self.assertEqual(mock_open.call_count, 1)