2013-04-10 104 views
15

我必須使用MongoDB商店來實現Python代碼的nosetests。有沒有任何python庫允許我初始化模擬內存MongoDB服務器?使用模擬MongoDB服務器進行單元測試

我正在使用持續集成。所以,我希望我的測試獨立於任何運行MongoDB的服務器。 有沒有辦法在內存中模擬mongoDM Server來獨立於連接到Mongo服務器來測試代碼?

在此先感謝!

回答

11

您可以嘗試:https://github.com/vmalloc/mongomock,它旨在成爲一個小型庫,用於嘲笑pymongo集合對象以進行測試。

但是,我不確定只是運行mongodb的成本與確保某些嘲諷庫功能完備相比是不可取的。

+7

如果能夠得到一個關於mongoengine和mongomock如何在一起玩的很好的例子。 – badgley 2013-10-11 00:49:39

+0

確保您與3.0以後的版本具有良好的兼容性。我在升級服務器和驅動程序(pymongo)後立即嘗試使用所有框架來嘲笑我的集合。 – 2016-04-04 18:24:11

4

我不瞭解Python,但我對C#也有類似的擔憂。我決定在我的工作站上運行一個真實的Mongo實例,指向一個空目錄。這不是很好,因爲代碼不是孤立的,而是快速簡單。

只有數據訪問層在測試期間實際調用Mongo。其餘的可以依靠數據訪問層的模擬。無論如何,當我真的想驗證與Mongo的交互是正確的時,我並不覺得僞裝了Mongo是值得的。

+4

+1我不明白想孤立地測試一切的願望。你可以期望的最好的是它的行爲像真實的東西。只是測試真實的東西。配置專用測試數據庫。 – Leopd 2013-04-10 03:39:30

+3

這是一個有效的觀點,但單獨測試的一個原因是您可以更輕鬆地將其提供給其他人,以便他們也可以在其環境中進行測試。如果他們必須建立一個外部過程,那麼這會變得更加繁重(儘管在這種情況下它可能是值得的)。 – 2013-06-12 16:42:59

+0

此外,如果測試旨在管道中運行,則無法確定是否安裝了數據庫。 – sri85 2015-08-26 13:28:20

1

您可以使用Ming,它有一個內存中的mongo db pymongo連接替換。

import ming 
mg = ming.create_datastore('mim://') 
mg.conn # is the connection 
mg.db # is a db with no name 
mg.conn.somedb.somecol 
# >> mim.Collection(mim.Database(somedb), somecol) 
col = mg.conn.somedb.somecol 
col.insert({'a': 1}) 
# >> ObjectId('5216ac3fe0323a1218f4e9aa') 
col.find().count() 
# >> 1 
+0

與上面相同。我嘗試使用MongoDB => 3.0,並且大部分時間都失敗了,因爲ming並不是爲此而設計的。只要複雜性增加,它越來越不可靠。 – 2016-04-04 18:26:29

+0

@HéctorValverdePareja你想做什麼失敗?正如你可以從代碼片段看到的,插入並找到正常工作。 – Pykler 2016-04-05 03:56:14

+0

對不起,當我說'上面'時,我的意思是我在批准的答案中添加的評論。這是關於兼容性。 Ming不支持最新版本的pymongo(後來改爲3.0),例如功能「insert_one()」,而不是「insert()」,Ming不支持(或者在2 - 3個月前我不玩它。 – 2016-04-05 08:20:08

相關問題