2016-07-05 7 views
1

У меня есть эти файлы:Как высмеять возвращаемое значение метода класса, импортированного из другого класса в Python?

/foo.py 
/foo2.py 
/test_food.py 

в foo.py, у меня есть это:

from foo2 import Foo2 

class Foo(object): 

    def GetFoo2(self): 
     f = Foo2() 
     return f.Get() 

и в foo2.py, у меня есть:

class Foo2(object): 

    def __init__(self): 
     self.myvar = "eeee" 

    def Get(self): 
     return self.myvar 

В test_foo.py ,

import os, sys, json, pytest 
from mock import * 
from foo import Foo 

def test_foo_ok(monkeypatch): 

    monkeypatch.setattr(Foo, "GetFoo2", lambda x:"abc") 
    f = Foo() 
    result = f.GetFoo2() 
    assert result == "abc" 

Итак, в test_foo.py, я могу высмеять или обезвредить метод GetFoo2(). Однако, вместо этого, как я могу высмеять возвращаемое значение метода Get() Foo2 из test_foo.py без изменения кода в foo.py и foo2.py?

ответ

0

Всякий раз, когда вы импортируете с помощью from, вы можете исправить пространство имен этого модуля. Вот пример для test_foo_ok функции:

import os, sys, json, pytest 
from mock import * 
from foo import Foo 

def test_foo_ok(monkeypatch): 
    monkeypatch.setattr("foo.Foo2.Get", lambda x:"abc") 
    f = Foo() 
    result = f.GetFoo2() 
    assert result == "abc" 

См where to patch раздел документации Ложная библиотеки для более подробной информации. Те же правила применяются к обезьянному патчу pytest.

+0

Я попробовал это, и я получил эту ошибку в monkeypatch.setattr (...): ImportError: модуль не назвал Foo – murvinlai

+0

@murvinlai какой версии pytest? Я протестировал это с помощью 2.9.1, используя ваши другие файлы, названные так, как вы их описали. – jordanm

 Смежные вопросы

  • Нет связанных вопросов^_^