2013-04-10 3 views
15

MongoDB 스토어를 사용하여 파이썬 코드 용 nosetests를 구현해야합니다. 모의 메모리 내 MongoDB 서버를 초기화 할 수있는 파이썬 라이브러리가 있습니까?유닛 테스트를 위해 모의 MongoDB 서버 사용

저는 지속적인 통합을 사용하고 있습니다. 따라서 테스트를 MongoDB를 실행하는 서버와 독립적으로 수행 할 수 있습니다. Mongo 서버에 연결하는 것과는 독립적으로 코드를 테스트하기 위해 mongoDM Server를 메모리에 모의 할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

11

시도해 볼 수 있습니다 : https://github.com/vmalloc/mongomock, 테스트 목적으로 pymongo 컬렉션 객체를 조롱하기위한 작은 라이브러리를 목표로합니다.

그러나 mongodb를 실행하는 것의 비용이 일부 조롱 라이브러리가 기능 완료라는 것에 비해 엄청날 것이라고 확신하지는 않습니다.

+7

mongoengine과 mongomock이 어떻게 잘 함께 할 수 있는지 예제를 얻는 것이 정말 좋을 것입니다. – badgley

+0

3.0 이상 버전과의 호환성이 양호한 지 확인하십시오. 나는 서버와 드라이버 (pymongo)를 업그레이드 한 직후 시도한 모든 프레임 워크로 내 컬렉션을 조롱하지 못했습니다. –

4

파이썬에 대해 잘 모르지만 C#과 비슷한 문제가 있습니다. 나는 워크 스테이션에서 Mongo의 실제 인스턴스를 단지 빈 디렉토리를 가리 키기로 결정했다. 코드가 격리되지 않았으므로 빠르고 쉽습니다.

실제로 데이터 액세스 레이어 만 테스트 중에 Mongo를 호출합니다. 나머지는 데이터 액세스 계층의 모의에 의존 할 수 있습니다. 나는 Mongo와의 상호 작용이 어쨌든 정확하다는 것을 정말로 확인하고 싶을 때 Mongo가 노력할 가치가 있다고 생각하지 않았다.

+4

+1 모든 것을 개별적으로 테스트하려는 욕망을 이해하지 못합니다. 당신이 희망 할 수있는 최선은 그것이 진짜처럼 행동한다는 것입니다. 그냥 진짜 테스트 해봐. 전용 테스트 데이터베이스를 구성하십시오. – Leopd

+3

그게 유효한 지적입니다.하지만 격리되어 테스트하는 한 가지 이유는 다른 사람들에게 테스트를 더 쉽게 제공 할 수 있다는 것입니다. 외부 프로세스를 설정해야하는 경우 이는 더욱 부담 스럽습니다 (이 경우에는 가치가 있음). –

+0

그리고 테스트가 파이프 라인에서 실행될 예정이라면 DB를 설치했는지 확신 할 수 없습니다. – sri85

1

메모리 내 mongo db pymongo 연결 대체가있는 Ming을 사용할 수 있습니다.

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을 시도했는데, ming이 이것을 의미하지 않기 때문에 대부분의 경우 실패했다. 복잡성이 증가하는 한 점점 더 신뢰할 수 없습니다. –

+0

@ HéctorValverdePareja 무엇을하려고합니까? 스 니펫에서 볼 수 있듯이 삽입하여 잘 작동합니다. – Pykler

+0

죄송합니다. '위에서'라고 말하면 승인 된 답변에 덧붙인 설명을 의미했습니다. 그것은 호환성에 관한 것입니다. Ming은 최신 버전의 pymongo (예 : 3.0)를 지원하지 않았습니다. 예를 들어 "insert_one()"대신 Ming이 지원하지 않습니다 (2 ~ 3 개월 전 플레이하지 않았을 때). 그것. –

관련 문제