[英]How to mock a class in Python?
我是Python的新手,但是我曾經使用過ruby。
我正在嘗試使用Python進行一些測試,但無法弄清楚如何為測試模擬一個類。
假設我有這個真實的課堂:
from database import DB
class Foo:
def do_it(self):
x = {'key': 'value'}
DB.save(x)
# do other stuff with x
return x
現在,我想測試是否對x所做的一切都能返回正確的結果,並且我想測試是否使用x作為參數調用了DB.save,但是我實際上並不希望將x保存到數據庫中。 要查看是否正在調用DB.save,我可以使用一些模擬框架,但是如何告訴Foo類需要它來使用模擬對象而不是真正的DB對象?
謝謝。
編輯:對不起,我的例子還不夠我需要完成的工作。
讓我們看看這個新的例子:
from database import DB
class Foo:
DB.connect()
def do_it(self):
x = {'key': 'value'}
DB.save(x)
# do other stuff with x
return x
例如,假設數據庫已關閉。
當我導入Foo時,它會引發連接錯誤,並且我沒有時間模擬數據庫。
我該怎么辦??
答案是,不要那樣編寫您的類。 無論如何,這是一種奇怪的方式-除了屬性和方法定義之外,在類級別上實際上不應該有任何可執行代碼。 您應該使用__init__
方法設置連接。
class Foo(object):
def __init__(self, *args, **kwargs):
DB.connect()
每次Foo.do_it()
都會在模塊范圍內查找DB
。 您可以簡單地為DB
分配一個不同的對象,它將被使用。 如果您的Foo
類位於某個模塊foo
,則可以執行以下操作
import foo
foo.DB = mocked_DB
f = foo.Foo()
f.do_it()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.