首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从单元测试django视图中模拟模型方法?

如何从单元测试django视图中模拟模型方法?
EN

Stack Overflow用户
提问于 2020-02-20 21:00:27
回答 1查看 538关注 0票数 0

我正在尝试模拟一个下游函数调用,以便让我的单元测试通过DRF视图。

我的模型中有一个create()方法,即调用外部upload_files()函数。我正在尝试弄清楚如何模拟upload_files()调用(但来自对我的视图的测试)

由于视图调用序列化程序,而序列化程序调用模型,因此我需要找出正确的名称空间,以便模拟路径。这是我的代码,它显示了我正在尝试做的事情,但是我认为传递给mock.patch的路径是不正确的。

在运行单元测试时收到此错误

代码语言:javascript
运行
AI代码解释
复制
ERROR: test_post (tests.api.views.test_stage_execution_view.StageExecutionViewTest)
ModuleNotFoundError: No module named 'myapp.models.stage_execution.StageExecution'; 'myapp.models.stage_execution' is not a package

从drf api对视图进行单元测试:

代码语言:javascript
运行
AI代码解释
复制
# myapp/tests/api/views/test_stage_execution_view.py

class StageExecutionViewTest(APITestCase):
    @mock.patch('myapp.models.stage_execution.StageExecution.create.upload_files', side_effect=mocked_upload_files)
    def setUp(self, arg):
        self.stage_execution = StageExecution.manager.create(
            stage="test",
            job_execution="test",
            time_start="2018-12-20T12:05:00.258797-08:00",
        )

    @mock.patch('myapp.models.stage_execution.StageExecution.create.upload_files', side_effect=mocked_upload_files)
    def test_post(self):
        start_stage_execution_payload = {"bla"}
        response = self.client.post(
        "/api/v2/stage_execution", start_stage_execution_payload, format="json"
    )
        assert response.status_code == 201

型号:

代码语言:javascript
运行
AI代码解释
复制
#myapp/models/stage_execution.py

class StageExecution(JsonableModel):
    stage = models.CharField(max_length=150, blank=True, null=True)
    job_execution = models.CharField(max_length=150, blank=True, null=True)
    time_start = models.DateTimeField()

class StageExecutionManager(models.Manager):
    def get_queryset(self):
        return StageExecutionQuerySet(self.model, using=self._db)

    def create(self, **kwargs):
        from myapp.tasks import upload_files
        upload_files()

序列化程序:

代码语言:javascript
运行
AI代码解释
复制
# myapp/api/serializers/stage_execution_serializer.py

class StageExecutionSerializer(serializers.ModelSerializer):

    class Meta:
        model = StageExecution
        fields = (
            "stage",
            "job_execution",
            "time_start"

视图:

代码语言:javascript
运行
AI代码解释
复制
# myapp/api/views/stage_execution_view.py

class StageExecutionView(GenericAPIView):
    serializer_class = StageExecutionSerializer

    def get_queryset(self):
        return StageExecution.manager.all()

    def get(self, request, format=None):
        queryset = self.get_queryset()

    if queryset.exists():
        serializer = StageExecutionSerializer(queryset, many=True)
        return Response(serializer.data)
EN

回答 1

Stack Overflow用户

发布于 2020-02-21 00:22:03

您可以使用它模拟upload_files

代码语言:javascript
运行
AI代码解释
复制
@mock.patch('myapp.tasks.upload_files')
def setUp(self, mocked_upload_files):
    mocked_upload_files.return_value = ""  # You can change here to get return value you need
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60328429

复制
相关文章
Unit Test单元测试时如何模拟HttpContext
参考文章:http://blog.csdn.net/bclz_vs/article/details/6902638
跟着阿笨一起玩NET
2018/09/19
1.5K0
django单元测试
Django支持单元测试,在添加应用时,会自动创建tests.py文件。但在实际应用中,一般针对每个模块添加单元测试,而不是仅仅针对单个应用添加单元测试。所以,可以删除tests.py文件,添加test forms.py, test models.py, test views.py。毕竟Python设计之禅中说了Flat is better than nested。
用户2936342
2018/08/27
5360
django 视图中使用多线程
如果你需要在django视图中使用多线程执行其他任务,然后发现执行完后并没有达到你逾期的执行结果,
kirin
2021/04/09
2K0
Django单元测试报错
https://stackoverflow.com/questions/14186055/django-test-app-error-got-an-error-creating-the-test-database-permission-deni/14186439
BigYoung小站
2020/05/04
7060
Mockito模拟进行单元测试
MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。
chinotan
2022/01/04
7K0
Mockito模拟进行单元测试
单元测试模拟框架:Nsubstitute
     Nsubstitute是一个开源的框架,源码是C#实现的。你可以在这里获得它的源码:https://github.com/nsubstitute/NSubstitute NSubstitute 更注重替代(Substitute)概念。它的设计目标是提供一个优秀的测试替代的.NET模拟框架。它是一个模拟测试框架,用最简洁的语法,使得我们能够把更多的注意力放在测试工作,减轻我们的测试配置工作,以满足我们的测试需求,帮助完成测试工作。它提供最经常需要使用的测试功能,且易于使用,语句更符合自然语言,可
张善友
2018/01/29
1.7K0
Mockito模拟进行单元测试
    MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。
chinotan
2019/07/15
9.5K0
Mockito模拟进行单元测试
Django模型(数据库)及Django Query常用方法
Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。 新建项目和应用
Python攻城狮
2018/08/23
2.6K0
Django模型(数据库)及Django Query常用方法
Django 模型中自定义Manager和模型方法
在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个manager,你可以创建自定义manager以定制数据库的访问. 这里有两个方法创建自定义manager:添加额外的manager;修改manager返回的初始Queryset.
菲宇
2019/06/13
2.8K0
Django 单元测试笔记
1.使用django框架自带的tests.py文件进行单元测试; 2.自定义创建test.py文件; 这两种是一样,只是运行时所执行目录不一样。
全栈测试开发日记
2023/02/02
3270
编写 Django 应用单元测试
我们博客功能越来越来完善了,但这也带来了一个问题,我们不敢轻易地修改已有功能的代码了!
HelloGitHub
2021/05/14
7860
基于django的单元测试
django.test.TestCase类主要由前、后置处理方法 和test开头的方法组成
用户8870853
2021/08/30
7270
Django单元测试简单示例
对一个功能的验证往往是需要很多多测试用例,可以把测试用例集合在一起执行,这就产生了测试套件TestSuite 的概念,它是用来组装单个测试用例,规定用例的执行的顺序,而且TestSuite也可以嵌套TestSuite。
人生不如戏
2018/12/05
6890
使用DeepWalk从图中提取特征
以下文章来源于磐创AI,作者VK 来源:公众号 磐创AI 授权转 概述 从表格或图像数据中提取特征的方法已经众所周知了,但是图(数据结构的图)数据呢? 学习如何使用DeepWalk从图中提取特征 我们
OpenCV学堂
2019/12/09
1.1K0
使用DeepWalk从图中提取特征
使用DeepWalk从图中提取特征
作者 | PRATEEK JOSHI 编译 | VK 来源 | Analytics Vidhya 概述 从表格或图像数据中提取特征的方法已经众所周知了,但是图(数据结构的图)数据呢? 学习如何使用De
磐创AI
2019/12/03
2.1K0
基于django的单元测试
django.test.TestCase类主要由前、后置处理方法 和test开头的方法组成
用户8670130
2021/08/31
8310
[PHP] hyperf单元测试模拟http请求
composer create-project hyperf/hyperf-skeleton
唯一Chat
2021/06/29
1.2K0
Django 教程 --- Django 模型
一个Django模块是内置的功能,Django使用创建表,他们的田地,和各种约束。简而言之,Django Models是与Django一起使用的SQL数据库。SQL(结构化查询语言)很复杂,涉及许多不同的查询,用于创建,删除,更新或与数据库有关的任何其他内容。Django模型简化了任务并将表组织到模型中。通常,每个模型都映射到单个数据库表。 本文围绕如何使用Django模型方便地将数据存储在数据库中展开。此外,我们可以使用Django的管理面板来创建,更新,删除或检索模型的字段以及各种类似的操作。Django模型提供了简单性,一致性,版本控制和高级元数据处理。模型的基础包括–
公众号---人生代码
2020/05/25
2.2K0
点击加载更多

相似问题

模拟Django模型方法

18

在Django中模拟模型方法

31

Django:模拟模型的创建方法

10

如何在Django模型上模拟链式方法

11

Django -模拟模型上的保存方法

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档