python - 模拟 django 测试 - 为什么这个补丁函数仍然被调用?
问题描述
我正在尝试在我的一个模型中测试一个函数,并尝试使用mock.patch
. 无论我尝试什么,它似乎都没有拦截该方法。
要测试的模型:
应用程序/模型.py
from django.db import models
from .utils.storageutils import get_file
from .utils.datautils import derive_data
Class DataThing(models.Model):
#defined here
def set_data_from_file(self):
data = derive_data(get_file('filepath'))
setattr(self, 'derived_data', data)
self.save()
应用程序/实用程序/datautils.py
import pandas as pd
def derive_data(data_from_file):
df = pd.DataFrame('...')
#do stuff with dataframe
return df
应用程序/测试/unit_tests/tests_models.py
from django.test import TestCase
import mock
from app.models import DataThing
class DataThingModelTest(TestCase):
@classmethod
def setUpTestData(cls):
cls.datathing = DataThing
@mock.patch('app.models.derive_data')
def test_set_data_from_file(self, mocked_derive_data):
mocked_derive_data.return_value=('pretend_dataframe')
self.datathing.set_data_from_file()
self.assertEquals(self.datathing.derived_data, 'pretend_dataframe')
我希望这会通过。但是,我收到一个错误,因为datathing.set_data_from_file()
最终仍在调用utils.storageutils.get_file
. 我试过修补,app.utils.datautils.derive_data
但有同样的问题。
解决方案
我还需要修补get_file
功能
@mock.patch('app.models.get_file')
@mock.patch('app.models.derive_data')
def test_set_data_from_file(self, mocked_derive_data, mocked_ger_file):
mocked_get_file.return_value=('placeholder')
mocked_derive_data.return_value=('pretend_dataframe')
self.datathing.set_data_from_file()
self.assertEquals(self.datathing.derived_data, 'pretend_dataframe')
推荐阅读
- mysql - 为什么 MySQL 服务器在 RDS 上的执行速度比在 EC2 上慢?
- javascript - 具有新 ParentId 和 ChildId 的循环树
- reactjs - 我的 React 应用程序在 Chrome 中运行良好,但在 Firefox 中无法运行
- java - 无法查看 ExoPlayer 视频,但我听到了声音
- javascript - 使用c#将图像发送到whatsapp号码
- mysql - 如何从有条件的 Varchar 列的子字符串中查询最大整数值
- java - 如何用“(”分割java字符串?
- mysql - 如何在mysql表上存储多个值
- c - Mandelbrot 在 OpenGL 中设置 - C
- android - 在 RatingBar 上设置监听器总是被调用