簡體   English   中英

如何在Python中模擬類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM