小编bfs*_*ott的帖子

正确的方法python mock __init __()方法返回一个假类

试图模拟调用pyazure库进行django测试,但我无法弄清楚如何模拟PyAzure类构造函数,以便它不会导致TypeError.有没有更好的方法来模拟生成连接对象的访问库?

我尝试过的除None之外的任何东西都会产生TypeError,这意味着我甚至无法开始使用实际返回值来测试任何PyAzure连接方法.使用mock替换假类的最佳方法是什么?

测试错误:

======================================================================
ERROR: test_management_certificate_connect (azure_cloud.tests.ViewsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/bschott/Source/django-nimbis/apps/azure_cloud/tests.py", line 107, in test_management_certificate_connect
self.cert1.connect()
File "/Users/bschott/Source/django-nimbis/apps/azure_cloud/models.py", line 242, in connect 
    subscription_id=self.subscription.subscription_id)
TypeError: __init__() should return None, not 'FakeAzure'
----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

tests.py:

 class ViewsTest(TestCase):
    def setUp(self):
    ...
        self.cert1 = ManagementCertificate.objects.create(
            name="cert1",
            subscription=self.subscription1,
            management_cert=File(open(__file__), "cert1.pem"),
            owner=self.user1)
    ...

    class FakeAzure(object):
        """ testing class for azure """
        def list_services(self):
            return ['service1', 'service2', 'service3']
        def list_storages(self):
            return ['storage1', 'storage2', 'storage3']

    @mock.patch.object(pyazure.PyAzure, '__init__')
    def test_management_certificate_connect(self, mock_pyazure_init):
        mock_pyazure_init.return_value = self.FakeAzure()
        self.cert1.connect()
        assert …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking

5
推荐指数
1
解决办法
7139
查看次数

标签 统计

mocking ×1

python ×1

unit-testing ×1