首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自另一个文件的py.test夹具

来自另一个文件的py.test夹具
EN

Stack Overflow用户
提问于 2015-01-11 15:09:47
回答 1查看 11K关注 0票数 9

我有以下要测试的文件

manage.py

代码语言:javascript
复制
import socket
def __get_pod():
    try:
        pod = socket.gethostname().split("-")[-1].split(".")[0]
    except:
        pod = "Unknown"

    return pod

下面是我的测试脚本测试/ test _manage.py e.py

代码语言:javascript
复制
import sys
import pytest

sys.path.append('../')

from manage import __get_pod

#
# create a fixture for a softlayer IP stack
@pytest.fixture
def patch_socket(monkeypatch):

    class my_gethostname:
        @classmethod
        def gethostname(cls):
            return 'web01-east.domain.com'

    monkeypatch.setattr(socket, 'socket', my_gethostname)


def test__get_pod_single_dash():
    assert __get_pod() == 'east'

所以,当我尝试测试它时,当我想要它使用夹具时,它承载了我的笔记本主机名。是否可以在另一个文件中使用夹具?

代码语言:javascript
复制
$ py.test -v
======================================================================= test session starts ========================================================================
platform darwin -- Python 2.7.8 -- py-1.4.26 -- pytest-2.6.4 -- /usr/local/opt/python/bin/python2.7
collected 1 items

test_manage.py::test__get_pod_single_dash FAILED

============================================================================= FAILURES =============================================================================
____________________________________________________________________ test__get_pod_single_dash _____________________________________________________________________

    def test__get_pod_single_dash():
>       assert __get_pod() == 'east'
E       assert '2' == 'east'
E         - 2
E         + east
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-11 16:13:26

首先,您需要修改测试函数,以便它接受一个名为patch_socket的参数。

代码语言:javascript
复制
def test__get_pod_single_dash(patch_socket):
    assert __get_pod() == 'east'

这意味着py.test将调用您的夹具,并将结果传递给您的函数。这里最重要的是确实有人打电话给我。

第二件事是,您的monkeypatch调用将一个名为socket.socket的变量设置为my_gethostname,这不会影响您的函数。将patch_socket简化为:

代码语言:javascript
复制
import socket

@pytest.fixture
def patch_socket(monkeypatch):
    def gethostname():
        return 'web01-east.domain.com'

    monkeypatch.setattr(socket, 'gethostname', gethostname)

然后让测试通过。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27888562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档