使用python“mock”(Django)模拟类有困难

2024-04-26 00:48:29 发布

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

我使用python的“mock”模块来模拟django项目中的类和函数。 我的项目结构是:

Project name --> 'hello'
               App1 ----> hello
               App2 ----> hello_world
               App3 ----> bye

“hello”只包含测试.py设置.py'hello_world'包含视图文件'问候语.py'是这样的:

^{pr2}$

“再见”包含“视图.py,其中包含:

from django.shortcuts import render 
from django.http import HttpRequest

# Create your views here.

def saybye():
    print "goodbye world"
    return

class goodbye:
    def __init__(self):
        print "goodbye's init called"
        return

    def saygoodbye(self):
        return "goodbye.saygoodbye called"

现在,我的测试.py'是:

from unittest import TestCase

import mock
from mock import patch

from hello_world import greetings
import bye 

from django.test.client import RequestFactory


class TestBasic(TestCase):
    def setUp(self):
        self.var = 'abc'
        self.factory = RequestFactory()

    @patch('bye.views.goodbye')
    def test_greeting(self,mocksaybye):
        assert mocksaybye is bye.views.goodbye
        mocksaybye.saygoodbye = mock.MagicMock(return_value="mocked goodbye called")

        bye.views.goodbye()
        print mocksaybye.saygoodbye()

        assert mocksaybye.called
        assert mocksaybye.saygoodbye.called

        req = self.factory.get('/sayhello/')
        greetings.greet(req)

我得到以下关于运行python的输出管理.py测试':

mocked goodbye called
goodbye world
<MagicMock name='goodbye().saygoodbye()' id='60566864'>
greet called

我期望输出的第三行是:"mocked goodbye called"据我所知,mocksaybey类将模拟goodbye类的saygoody函数,并返回名为的自定义输出mockbeyond。在

然而,这种情况不会发生。为什么会这样?另外,我应该怎么做才能得到这个期望的输出呢?在


Tags: djangofrompyimportselfhelloworlddef
1条回答
网友
1楼 · 发布于 2024-04-26 00:48:29

您需要使用^{}方法,而不是^{}。还有^{}而不是{a4}

因此,代替这段代码:

@patch('bye.views.goodbye')
def test_greeting(self,mocksaybye):
    # ...
    mocksaybye.saygoodbye = mock.MagicMock(return_value="mocked goodbye called")
    # ...

使用此项(尚未测试):

^{pr2}$

相关问题 更多 >