[MONGODB] 통합 테스트를 실행할 때 MongoDB를 임베디드
MONGODB통합 테스트를 실행할 때 MongoDB를 임베디드
제 질문은 이것의 변형입니다.
내 자바 웹 응용 프로그램 프로젝트 GridFS 같은 도구를 읽어 필터 / 쿼리 및 인터페이스를 많이 필요로하기 때문에, 나는 위의 솔루션을 제안하는 방식으로 채용하여 MongoDB에 합리적인 방법을 생각 사투를 벌인거야.
따라서, 내 통합 테스트와 함께 MongoDB를의 임베디드 인스턴스를 실행 고려 중이 야. 나는 (중 각 테스트 또는 전체 제품군에 대한) 모든 테스트에 대한 데이터베이스를 플러시 자동으로 시작하고, 마지막에 종료하고 싶습니다. 내 솔루션은 또한 휴대 할 필요가있을 것이다, 그래서이 테스트는, 개발 기계뿐만 아니라 CI 서버에서 실행 될 수 있습니다.
MongoDB의 도움 나이 방법의 타당성의 아이디어를 얻을, 그리고 / 혹은 어떤 독서 자료를 제시에 대한 자세한 지식을 캔 사람은 나를 시작하는 데 도움이 수 있습니까?
나는 또한 사람들이 내가이 문제를 접근 할 수있는 방법에 미칠 수있는 다른 제안을 열려있어 ...
해결법
-
==============================
1.여기 @rozky에서 허용 대답의 업데이트 (2019) 버전 (많은이 몽고 및 임베디드 MongoDB를 라이브러리에 모두 변경되었습니다)가 있습니다.
여기 @rozky에서 허용 대답의 업데이트 (2019) 버전 (많은이 몽고 및 임베디드 MongoDB를 라이브러리에 모두 변경되었습니다)가 있습니다.
package com.example.mongo; import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import de.flapdoodle.embed.mongo.MongodExecutable; import de.flapdoodle.embed.mongo.MongodProcess; import de.flapdoodle.embed.mongo.MongodStarter; import de.flapdoodle.embed.mongo.config.IMongodConfig; import de.flapdoodle.embed.mongo.config.MongodConfigBuilder; import de.flapdoodle.embed.mongo.config.Net; import de.flapdoodle.embed.mongo.distribution.Version; import de.flapdoodle.embed.process.runtime.Network; import java.util.Date; import org.junit.After; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class EmbeddedMongoTest { private static final String DATABASE_NAME = "embedded"; private MongodExecutable mongodExe; private MongodProcess mongod; private MongoClient mongo; @Before public void beforeEach() throws Exception { MongodStarter starter = MongodStarter.getDefaultInstance(); String bindIp = "localhost"; int port = 12345; IMongodConfig mongodConfig = new MongodConfigBuilder() .version(Version.Main.PRODUCTION) .net(new Net(bindIp, port, Network.localhostIsIPv6())) .build(); this.mongodExe = starter.prepare(mongodConfig); this.mongod = mongodExe.start(); this.mongo = new MongoClient(bindIp, port); } @After public void afterEach() throws Exception { if (this.mongod != null) { this.mongod.stop(); this.mongodExe.stop(); } } @Test public void shouldCreateNewObjectInEmbeddedMongoDb() { // given MongoDatabase db = mongo.getDatabase(DATABASE_NAME); db.createCollection("testCollection"); MongoCollection<BasicDBObject> col = db.getCollection("testCollection", BasicDBObject.class); // when col.insertOne(new BasicDBObject("testDoc", new Date())); // then assertEquals(1L, col.countDocuments()); } }
-
==============================
2.나는 매우 유망 보이는 당신이 요구 한 것을 수행 임베디드 MongoDB의 라이브러리를 발견했다.
나는 매우 유망 보이는 당신이 요구 한 것을 수행 임베디드 MongoDB의 라이브러리를 발견했다.
현재 MongoDB의 버전을 지원합니다 : 1.6.5 3.1.6로, 바이너리가 아직 구성 거울에서 사용할 수 있습니다 제공.
여기에 난 그냥 시도 사용의 간단한 예이며 완벽하게 작동합니다 :
public class EmbeddedMongoTest { private static final String DATABASE_NAME = "embedded"; private MongodExecutable mongodExe; private MongodProcess mongod; private Mongo mongo; @Before public void beforeEach() throws Exception { MongoDBRuntime runtime = MongoDBRuntime.getDefaultInstance(); mongodExe = runtime.prepare(new MongodConfig(Version.V2_3_0, 12345, Network.localhostIsIPv6())); mongod = mongodExe.start(); mongo = new Mongo("localhost", 12345); } @After public void afterEach() throws Exception { if (this.mongod != null) { this.mongod.stop(); this.mongodExe.stop(); } } @Test public void shouldCreateNewObjectInEmbeddedMongoDb() { // given DB db = mongo.getDB(DATABASE_NAME); DBCollection col = db.createCollection("testCollection", new BasicDBObject()); // when col.save(new BasicDBObject("testDoc", new Date())); // then assertThat(col.getCount(), Matchers.is(1L)); } }
-
==============================
3.포 스퀘어 제품 Fongo이있다. Fongo는 몽고의 메모리 자바 구현이다. 그것은 발견, 업데이트, 삽입, 제거하고 다른 방법에 대한 표준 몽고 - 자바 드라이버에 대한 호출을 차단합니다. 주요 사용은 당신이 몽고 과정을 회전하지 않으려는 경량의 단위 테스트를위한 것입니다.
포 스퀘어 제품 Fongo이있다. Fongo는 몽고의 메모리 자바 구현이다. 그것은 발견, 업데이트, 삽입, 제거하고 다른 방법에 대한 표준 몽고 - 자바 드라이버에 대한 호출을 차단합니다. 주요 사용은 당신이 몽고 과정을 회전하지 않으려는 경량의 단위 테스트를위한 것입니다.
-
==============================
4.당신은 메이븐을 사용하는 경우 당신은 내가 그 래핑 flapdoodle.de '임베디드 몽고'API를 만든 플러그인에 관심이있을 수 :
당신은 메이븐을 사용하는 경우 당신은 내가 그 래핑 flapdoodle.de '임베디드 몽고'API를 만든 플러그인에 관심이있을 수 :
그것은 당신이 (예를 들어, 사전 통합 테스트 동안) 당신이 원하는 MongoDB의 모든 버전을 시작하는 데 사용할 수있는 시작 목표, 그리고 (예를 들어, 후 통합 테스트 중) MongoDB를 중지하는 정지 목표를 제공합니다.
다른 사람을 통해이 플러그인을 사용하는 진정한 장점은 MongoDB를 미리 설치할 수에 대한 요구 사항이 없다는 것입니다. MongoDB를 바이너리 다운로드 ~이 / .embedmongo에 대한 미래의 빌드에 저장됩니다.
-
==============================
5.당신은 SBT와 specs2를 사용하는 경우, 나는 embedmongo에 대한 래퍼의 같은 종류를 썼다
당신은 SBT와 specs2를 사용하는 경우, 나는 embedmongo에 대한 래퍼의 같은 종류를 썼다
https://github.com/athieriot/specs2-embedmongo
-
==============================
6.봄 부팅 1.3 당신은 EmbeddedMongoAutoConfiguration을 사용할 수 있습니다
봄 부팅 1.3 당신은 EmbeddedMongoAutoConfiguration을 사용할 수 있습니다
pom.hml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.2.RELEASE</version> </parent> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> <version>${embedded-mongo.version}</version> </dependency>
MongoConfig
@Configuration @EnableAutoConfiguration(exclude = { EmbeddedMongoAutoConfiguration.class }) public class MongoConfig{ }
-
==============================
7.당신은 버전 3.2.6 기준으로 메모리에 MongoDB를 실행할 수 있습니다. 사이트에서 :
당신은 버전 3.2.6 기준으로 메모리에 MongoDB를 실행할 수 있습니다. 사이트에서 :
-
==============================
8.당신이 받는다는을 사용하는 경우, 당신은 우리에게 http://mvnrepository.com/artifact/com.wenzani/mongodb-maven-plugin을 사용할 수 있습니다
당신이 받는다는을 사용하는 경우, 당신은 우리에게 http://mvnrepository.com/artifact/com.wenzani/mongodb-maven-plugin을 사용할 수 있습니다
-
==============================
9.또한 MongoDB를 JVM 내부 메모리를 시뮬레이션이 프로젝트를 확인할 수 있습니다. https://github.com/thiloplanz/jmockmongo 그러나 아직 개발이다.
또한 MongoDB를 JVM 내부 메모리를 시뮬레이션이 프로젝트를 확인할 수 있습니다. https://github.com/thiloplanz/jmockmongo 그러나 아직 개발이다.
-
==============================
10.아니 단위 testings를 [단지에 대한,하지만 당신은 당신이 리눅스를 사용하는 경우 메모리 배포로 MongoDB를 (심지어 클러스터)를 실행하고자하는 경우이 블로그 게시물을 읽어 보시기 바랍니다.
아니 단위 testings를 [단지에 대한,하지만 당신은 당신이 리눅스를 사용하는 경우 메모리 배포로 MongoDB를 (심지어 클러스터)를 실행하고자하는 경우이 블로그 게시물을 읽어 보시기 바랍니다.
http://edgystuff.tumblr.com/post/49304254688
하지만 RavenDB 같은 상자의 그것을 밖으로 가지고 좋은 것입니다.
-
==============================
11.여기에 언급 된 embedmongo - 받는다는 - 플러그인과 유사하는 Gradle을 몽고 플러그인을 사용할 수도있다.
여기에 언급 된 embedmongo - 받는다는 - 플러그인과 유사하는 Gradle을 몽고 플러그인을 사용할 수도있다.
메이븐처럼 그것은 또한 터무니없는 말 EmbeddedMongoDb API를 래핑하고 당신이 당신의 Gradle을 빌드에서 몽고의 관리되는 인스턴스를 실행할 수 있습니다 플러그인.
-
==============================
12.여기에이 코드 예제를 확인하십시오 https://github.com/familysyan/embedded-mongo-integ합니다. 아니 설치, 아니 의존성. 그것은 단순히 당신을 위해 다운로드 및 설치를 할 수있는 플랫폼 독립적 인 개미 스크립트입니다. 그것은 또한 당신의 테스트 후 모든 것을 정리합니다.
여기에이 코드 예제를 확인하십시오 https://github.com/familysyan/embedded-mongo-integ합니다. 아니 설치, 아니 의존성. 그것은 단순히 당신을 위해 다운로드 및 설치를 할 수있는 플랫폼 독립적 인 개미 스크립트입니다. 그것은 또한 당신의 테스트 후 모든 것을 정리합니다.
-
==============================
13.생산, 당신은 실제 데이터베이스를 사용하는 것입니다.
생산, 당신은 실제 데이터베이스를 사용하는 것입니다.
당신이 당신의 테스트 제품 생산 동작하는 방법을 반영 할 경우, 몽고의 실제 인스턴스를 사용합니다.
가짜 구현은 진짜와 똑같은 동작하지 않을 수 있습니다. 테스트 할 때, 당신은 정확성을 위해 노력한다. 실행 속도가 두 번째 온다.
from https://stackoverflow.com/questions/6437226/embedded-mongodb-when-running-integration-tests by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 대다 협회 (0) | 2019.12.03 |
---|---|
[MONGODB] 어떻게 Node.js를 몽구스를 사용하여 문서를 제거하는 방법은 무엇입니까? (0) | 2019.12.03 |
[MONGODB] MongoError 다음 '커서'옵션은 설명 인수로 집계을 제외하고, 필요 (0) | 2019.12.03 |
[MONGODB] MongoDB를이 - 콜렉션에서 그룹 당 최대 속성을 가진 문서를 얻을 수 (0) | 2019.12.03 |
[MONGODB] 빠른지도에 비해 MongoDB를 집계 프레임 워크인가 / 감소? (0) | 2019.12.03 |