如何用Python3中的构造函数模拟对象?

2024-09-29 01:32:22 发布

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

我是Python新手(我来自Java),在Python3.2中使用mock时遇到了一个问题。在

代码如下:

import gzip    

class MyClass:

    _content = None

    _gzipfile = gzip.GzipFile

    def __init__(self, content):
        self._content = content

    def my_method(self):
        # Code ...
        gzipper = self._gzipfile(fileobj=data)
        return gzipper.read()


import unittest
from mockito import *

class MyClassTest(unittest.TestCase):

    def my_method_test(self):
        gzipfile = mock
        myclass = MyClass()
        myclass._gzipfile = mock
        myclass.my_method

我想对我的方法进行单元测试(我将mockito库用于mocks)。但当我执行测试时,我收到的信息是:

^{pr2}$

在本例中,我被迫使用命名参数调用GzipFile对象。在

有没有一种很好的方法来模拟这个gzip文件对象(以及类似的对象)?在


Tags: 对象importselfmydefmyclasscontentmock
1条回答
网友
1楼 · 发布于 2024-09-29 01:32:22

您看到的TypeError是因为您正在将myclass._gzipfile分配给mockito.mock类对象。因此,当my_method使用关键字参数fileobj=data调用_gzipfile,它实际上是在调用mockito.mock类,从而调用其不理解此参数的__init__方法。在

这样的事情应该行得通。它仍然不是一个理想的单元测试,因为它依赖于gzip.gzip文件,但它应该有助于你开始。在

import gzip

class MyClass(object):
    def __init__(self, content, file):
        self._content = content
        self._gzipper = gzip.GzipFile(filename=file)
    def my_method(self):
        # Code ...
        return self._gzipper.read()

import unittest
from mockito import *

class TestMyClass(unittest.TestCase):
    def setUp(self):
        self.my_class = MyClass('some content', 'file')

    def test_my_method(self):
    self.my_class._gzipper = mock()
        when(self.my_class._gzipper).read().thenReturn('gzipper read return')
        data = self.my_class.my_method()
        self.assertEqual(data, 'gzipper read return')

if __name__ == '__main__':
    unittest.main()

相关问题 更多 >