2017-01-28 2 views
0

Я пытаюсь высмеять глобальную переменную с помощью макетного движка, но кажется, что он не просто работает для моих переменных. Когда я патчу, например, os.name, он отлично работает, однако для моих пользовательских переменных он не работает. Вот код:mocking global variables on python не работает

global_var.py

var = 10 

use_global_var.py

from global_var import var 


def test_call(): 
    return var 

test.py

import mock 

from use_global_var import test_call 


@mock.patch('global_var.var', 50) 
def test_check(): 
    print(test_call()) 

test_check() 

print должен вернуть 50, если я правильно понял, но он возвращает 10. Кто-нибудь знает, в чем проблема здесь и как ее решить?

ответ

2

Вы не издевательский имя. use_global_var.test_call смотрит на имя use_global_var.var, но вы насмешливо global_var.var.

@mock.patch('use_global_var.var', 50) 
def test_check(): 
    print(test_call()) 

test_check() 
+0

ahh, он импортирует и становится use_global_var.var .. это звучит правильно. Большое спасибо за быстрый ответ. – incognito

+0

Право; если вы просто использовали 'import global_var' и' return global_var.var', то '' global_var.var'' было бы правильным для исправления. – chepner

+0

это странно :) возможно, достаточно чист для кого-то из мира питонов, но не для других. – incognito