Ich habe eine harte Zeit verspotten os.environ.get
in der Hoffnung, Sie können helfen.Verspotten in Python von einer importierten Klasse
Ich habe eine BaseClass, die importiert wird. Ich versuche, den Aufruf os.environ.get in dieser base_class-Datei zu verspotten, wenn die BaseClass-Methode in das Modul sub_class importiert wird.
project.data.base_class.py
import os
class BaseClass(object):
VAR1 = os.environ.get('something')
VAR2 = os.environ.get('something')
def __init__(self):
pass
def get(self):
return BaseClass.VAR1
project.data.sub_class.py
from project.data.base_class import BaseClass
class SubClass(BaseClass):
def __init__(self):
def run(self):
return self.get()
Ich möchte die SubClass.run
Methode testen, aber wenn ich spöttisch versuchen, kann ich nicht die richtige mock scheinen für os.environ einrichten zu erhalten . Hier ist, was ich versucht habe:
from mock import patch
@patch('base_class.os.environ')
def test_sub_class_run(self, mock_base):
mock_base.get.side_effect = ['var1', 'var2']
from sub_class import sub_class
self.assertEqual(sub_class.SubClass.run(), 'var1')
from mock import patch
und
@patch('sub_class.base_class.os.environ')
def test_sub_class_run(self, mock_base):
mock_base.get.side_effect = ['var1', 'var2']
from sub_class import sub_class
self.assertEqual(sub_class.SubClass.run(), 'var1')
Ich fühle mich wie wegen, wenn ich verwende os.environ, ich nicht richtig sind spöttisch. Ich bin mir nicht wirklich sicher, was der richtige Weg ist, den Schein zu strukturieren, um ihn dazu zu bringen, diesen Aufruf zu verspotten. richtig.
Das ist mein Pseudocode mehr oder weniger.
Ersetzen Sie 'mock_base.get.side_effect = ['var1', 'var2']' mit 'mock_base.get.side_effect = lambda * args: ['var1', 'var2']' –
Diese Frage kann hilfreich sein : http://stackoverflow.com/questions/31582750/python-mock-patch-os-environ-and-return-value?noredirect=1&lq=1 –