gpt4 book ai didi

python - 如何用 Mock 给 OS.mkdir 打补丁?

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:31 26 4
gpt4 key购买 nike

我正在尝试使用 Mock 模块和 pytest 进行单元测试。

我希望 os.path.isdir() 返回 False,并且 os.mkdir() 不运行;我只想验证传递给它的参数是否正确。

我觉得你只需要看看set_path方法

我的应用:

import pytumblr, os, sys, prowlpy, json, collections
from urllib2 import urlopen
from time import sleep
from apiclient.discovery import build

class Site(object):
"""A generic site."""
def __init__(self, user):
self.user = user

def set_path(self):
if os.path.isdir(self.user_dir): # if user dir already exists
print "**Directory already exists: ", self.user_dir
else:
os.mkdir(self.user_dir) # else create user dir
print "Created Directory: ", self.user_dir

class Tumblr(Site):
"""A tumblr blog."""
type = "tumblr"
type_dir = os.path.join(os.getcwd(), type)
def __init__(self, user):
super(Tumblr, self).__init__(user)
self.user_dir = os.path.join(Tumblr.type_dir, self.user)

我的测试总是失败,如下所示:

import tumblrip_new as tum
import mock

@mock.patch('tumblrip_new.os')
@mock.patch('tumblrip_new.os.path')
def test_create_new_user_dir(self, mock_path, mock_os):
"""Creates a directory if one does not exist."""
t = tum.Tumblr("username")
# directory does not exist:
mock_path.isdir.return_value = False
t.set_path()
mock_os.mkdir.assert_called_with(t.user_dir)

输出显示失败的原因:

_mock_self = <MagicMock name='os.mkdir' id='33647664'>
args = (<MagicMock name='os.path.join()' id='33568048'>,), kwargs = {}
self = <MagicMock name='os.mkdir' id='33647664'>
expected = "mkdir(<MagicMock name='os.path.join()' id='33568048'>)"

> ???
E AssertionError: Expected call: mkdir(<MagicMock name='os.path.join()' id='3
568048'>)
E Not called

build\bdist.win32\egg\mock.py:831: AssertionError
===================== 1 failed, 3 passed in 0.22 seconds ======================

最佳答案

我通过以下方式修复了它:

@mock.patch('tumblrip_new.os.path')
@mock.patch('tumblrip_new.os')
def test_create_new_user_dir(self, mock_os, mock_path):
"""Creates a directory if one does not exist."""
t = tum.Tumblr("username")
# directory does not exist:
mock_path.isdir.return_value=False
t.set_path()
mock_os.mkdir.assert_called_with(t.user_dir)

关于python - 如何用 Mock 给 OS.mkdir 打补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com