Python 第三方软件包的mock.patch()的Pytest路径

Python 第三方软件包的mock.patch()的Pytest路径,python,pytest,Python,Pytest,为什么第一个案例成功。但是第二个案例失败了。断言者错误:预期“詹金斯”会被调用 util.py from jenkinsapi.jenkins import Jenkins import os class Util: @staticmethod def rm(filename): os.remove(filename) @staticmethod def get_jenkins_instance(): Jenkins(

为什么第一个案例成功。但是第二个案例失败了。断言者错误:预期“詹金斯”会被调用

util.py

from jenkinsapi.jenkins import Jenkins
import os

class Util:
    @staticmethod
    def rm(filename):
        os.remove(filename)

    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util

def test_util_remove(mocker):
    m = mocker.patch('os.remove')
    Util.rm('file')
    m.assert_called()

def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')
    Util.get_jenkins_instance()
    m.assert_called()
from jenkinsapi.jenkins import Jenkins     # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)

import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('util.Jenkins')       # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()

import jenkinsapi.jenkins                  # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        jenkinsapi.jenkins.Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')     # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()

test_util.py

from jenkinsapi.jenkins import Jenkins
import os

class Util:
    @staticmethod
    def rm(filename):
        os.remove(filename)

    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util

def test_util_remove(mocker):
    m = mocker.patch('os.remove')
    Util.rm('file')
    m.assert_called()

def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')
    Util.get_jenkins_instance()
    m.assert_called()
from jenkinsapi.jenkins import Jenkins     # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)

import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('util.Jenkins')       # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()

import jenkinsapi.jenkins                  # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        jenkinsapi.jenkins.Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')     # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()


两个文件在同一个根文件夹中。

不太清楚Python的
导入
自。。。导入…

但是如果您使用来自的
。。。导入…
,模拟显示如下:

util.py

from jenkinsapi.jenkins import Jenkins
import os

class Util:
    @staticmethod
    def rm(filename):
        os.remove(filename)

    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util

def test_util_remove(mocker):
    m = mocker.patch('os.remove')
    Util.rm('file')
    m.assert_called()

def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')
    Util.get_jenkins_instance()
    m.assert_called()
from jenkinsapi.jenkins import Jenkins     # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)

import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('util.Jenkins')       # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()

import jenkinsapi.jenkins                  # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        jenkinsapi.jenkins.Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')     # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()

如果直接使用
import
,模拟显示如下:

util.py

from jenkinsapi.jenkins import Jenkins
import os

class Util:
    @staticmethod
    def rm(filename):
        os.remove(filename)

    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util

def test_util_remove(mocker):
    m = mocker.patch('os.remove')
    Util.rm('file')
    m.assert_called()

def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')
    Util.get_jenkins_instance()
    m.assert_called()
from jenkinsapi.jenkins import Jenkins     # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)

import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('util.Jenkins')       # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()

import jenkinsapi.jenkins                  # <-- difference A
class Util:
    @staticmethod
    def get_jenkins_instance():
        jenkinsapi.jenkins.Jenkins(
            'host',
            username='username',
            password='password',
            ssl_verify=False,
            lazy=True)
import pytest
from util import Util
def test_util_get_instance(mocker):
    m = mocker.patch('jenkinsapi.jenkins.Jenkins')     # <-- difference B
    Util.get_jenkins_instance()
    m.assert_called()


要模仿詹金斯,你必须编写下一个mock.patch(“utils.Jenkins”),哇,它很管用@alex2007v只是因为我导入它的方式不同,所以
操作系统不需要
utils
。删除
?您作为模块导入的操作系统,对于操作系统,您不需要此