Pytest путь mock.patch () для стороннего пакета - PullRequest
0 голосов
/ 17 января 2020

Почему 1-й случай успешен. Но во втором случае произошел сбой AssertionError: Expected 'Jenkins' to have been called.

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)

test_util.py

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()

Два файла находятся в одной папке root.

1 Ответ

1 голос
/ 20 января 2020

Не очень понятно, в чем разница между Python import и from ... import ....

Но если вы используете from ... import ..., макет выглядит следующим образом:

util.py

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)

test_util.py

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 напрямую, макет выглядит следующим образом:

util.py

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)

test_util.py

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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...