我真的在寻找如何修补Whatever.objects.get_or_create,但我无法得到任何建议或想法如何去做。

好吧,我的问题是我有这样的事情:

def create_and_get_object(
    name, request, save_url=True, data=None):

    try:
        (object_type_, created) = Object.objects.get_or_create(
            name=name)
        try:
        ...
    except Exception:
        obj = None
        msg = ("Failed to get or create object `Object` with"
                "name='%s'" % name)
        logger_.exception(msg, extra={'request': request})
    return obj

所以,我想测试一下Object.objects.get_or_create会抛出异常...

我正在尝试使用Mock(side_effect=Exception())但我真的不知道如何使用它来获得我期望的结果。

所有这些都可以获得该函数的100%覆盖率(不包括异常行),还有许多其他例外情况。

测试这个的正确方法是什么,这样的代码是什么?

我究竟做错了什么?

===============>>#1 票数:10 已采纳

我喜欢使用python的with语句与mock的patch.object 在你的情况下,它应该像这样:

from mock import patch
from django.test import TestCase
from django.db.models.manager import Manager
from anothermodule import create_and_get_object


class TestCreateAndGetObject(TestCase):
    def test_exception_throwing(self):
        with patch.object(Manager, 'get_or_create') as mock_method:
            mock_method.side_effect = Exception("test error")

            result = create_and_get_object('test', 'test')
            self.assertIsNone(result)

应该在理论上工作,希望有所帮助。

  ask by Tomás Solar translate from so

未解决问题?本站智能推荐:

2回复

您如何测试函数引发异常?

我下面有一个函数,想编写一个单元测试来检查我的代码是否使用模拟库捕获了ConnectionError 我有的: 我收到此错误: 我想模拟return requests.get("http://www.bongani.com")行,以便在调用时引发异常
1回复

python assertRaise没有捕获MagicMock异常

我试图创建一个单元测试来检查Python 3.4代码上的错误处理。 我正在使用来自模拟的MagicMock来替换子功能,并将异常作为side_effect引发,然后使用来自unittest的assertRaises来检查引发的异常。 不幸的是,尽管代码似乎正在处理异常,但是由于异常,测试
2回复

Python,mock:引发异常[关闭]

我在测试中从函数中引发异常时遇到问题: 我想raiseError()函数引发错误。 我在SO上找到了几个例子,但没有一个符合我的需要。
1回复

如何在Django中为几个测试模拟一个类

我有一个通过HTTP调用远程服务的类。 现在,该类将检测它是否正在“测试”模式下运行并采取相应的行动:“测试”时,它不会将实际请求发送到远程服务,而只是返回而不执行任何操作。 几个测试通过调用此方法来调用部分代码。 我的问题如下:
1回复

Django测试中的类模拟

我正在使用模拟1.0.1( http://www.voidspace.org.uk/python/mock/ )模拟测试中的对象,并且可以使用以下方法模拟日期: 但是,现在我正在尝试模拟一个类,并且相同的方法无法按预期工作: 我还尝试使用@ path.object并仅替换类方法,
2回复

我是在Django测试中模拟这个辅助函数吗?

lib.py tests.py 但是我得到了 为什么调用reverse而不是我的mock_reverse (它正在查找我的urls.py !!)。您可以看到calls返回一个空列表。 我什至assert mock_reverse.called ,它返回了false。
1回复

在django view测试中模拟助手功能

我有一个查看功能,可以启动用户登录请求 它看起来像这样: 然后该请求由另一个函数处理 然后另一个功能 问题是在测试我的代码时,我不想在测试时将消息发送到电话号码。 我的登录测试功能看起来像这样,是否可以在不更改我的代码的情况下对其进行模拟? 别人调
2回复

在utils.py的Django单元测试中模拟失败

我正在尝试为名为search_ldap()的函数编写单元测试,该函数将在给定特定用户名的情况下搜索LDAP服务器。 这是utils.py的函数定义(注意:我正在使用Python 3): 当然,我不想在测试期间实际连接到ldap.example.com ,因此我决定使用Python的模拟
5回复

如何在django中模拟用户和请求

我有与请求对象或用户对象交互的django代码。 例如: 如果您要使用django python shell或单元测试进行测试,那么您会在那里传递什么? 这里只是一个User对象,但是对模拟请求对象的需求也经常出现。 对于shell或单元测试: 你如何模仿用户?
1回复

如何在Django中模拟外部api?

我正在尝试模拟VKAuth类中的“ self.api.friends.get”方法: 来自测试模块test_views.py: 而且在测试过程中出现错误: 我究竟做错了什么? 如何在此类结构中访问此方法?