我必須使用MongoDB商店來實現Python代碼的nosetests。有沒有任何python庫允許我初始化模擬內存MongoDB服務器?使用模擬MongoDB服務器進行單元測試
我正在使用持續集成。所以,我希望我的測試獨立於任何運行MongoDB的服務器。 有沒有辦法在內存中模擬mongoDM Server來獨立於連接到Mongo服務器來測試代碼?
在此先感謝!
我必須使用MongoDB商店來實現Python代碼的nosetests。有沒有任何python庫允許我初始化模擬內存MongoDB服務器?使用模擬MongoDB服務器進行單元測試
我正在使用持續集成。所以,我希望我的測試獨立於任何運行MongoDB的服務器。 有沒有辦法在內存中模擬mongoDM Server來獨立於連接到Mongo服務器來測試代碼?
在此先感謝!
您可以嘗試:https://github.com/vmalloc/mongomock,它旨在成爲一個小型庫,用於嘲笑pymongo集合對象以進行測試。
但是,我不確定只是運行mongodb的成本與確保某些嘲諷庫功能完備相比是不可取的。
我不瞭解Python,但我對C#也有類似的擔憂。我決定在我的工作站上運行一個真實的Mongo實例,指向一個空目錄。這不是很好,因爲代碼不是孤立的,而是快速簡單。
只有數據訪問層在測試期間實際調用Mongo。其餘的可以依靠數據訪問層的模擬。無論如何,當我真的想驗證與Mongo的交互是正確的時,我並不覺得僞裝了Mongo是值得的。
您可以使用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
與上面相同。我嘗試使用MongoDB => 3.0,並且大部分時間都失敗了,因爲ming並不是爲此而設計的。只要複雜性增加,它越來越不可靠。 – 2016-04-04 18:26:29
@HéctorValverdePareja你想做什麼失敗?正如你可以從代碼片段看到的,插入並找到正常工作。 – Pykler 2016-04-05 03:56:14
對不起,當我說'上面'時,我的意思是我在批准的答案中添加的評論。這是關於兼容性。 Ming不支持最新版本的pymongo(後來改爲3.0),例如功能「insert_one()」,而不是「insert()」,Ming不支持(或者在2 - 3個月前我不玩它。 – 2016-04-05 08:20:08
如果能夠得到一個關於mongoengine和mongomock如何在一起玩的很好的例子。 – badgley 2013-10-11 00:49:39
確保您與3.0以後的版本具有良好的兼容性。我在升級服務器和驅動程序(pymongo)後立即嘗試使用所有框架來嘲笑我的集合。 – 2016-04-04 18:24:11