PostgreSQL을 기반으로하는 응용 프로그램을 단위 테스트 할 수 있도록 임베디드 PostgreSql이 있습니까?PostgreSQL을 내장했습니다.
PostgreSql에는 몇 가지 언어가 있으므로 다른 내장 데이터베이스보다 내장 된 PostgreSql 자체를 사용하는 것이 좋습니다.
PostgreSQL을 기반으로하는 응용 프로그램을 단위 테스트 할 수 있도록 임베디드 PostgreSql이 있습니까?PostgreSQL을 내장했습니다.
PostgreSql에는 몇 가지 언어가 있으므로 다른 내장 데이터베이스보다 내장 된 PostgreSql 자체를 사용하는 것이 좋습니다.
아니요, 프로세스로드 가능한 데이터베이스 라이브러리라는 의미에서 PostgreSQL은 포함되어 있지 않습니다. PostgreSQL은 프로세스 지향적입니다. 각 백엔드에는 하나의 스레드가 있으며 작업을 수행하기 위해 여러 프로세스가 생성됩니다. 그것은 도서관으로서 이해가되지 않습니다.
The H2 database은 a limited subset of the PostgreSQL SQL dialect을 지원하고 PgJDBC 드라이버를 사용합니다.
는, 다른 인스턴스와 충돌 테스트를 실행 한 다음 중지하고 마지막으로 임시 데이터베이스를 삭제 pg_ctl
를 사용하지 않는 있도록 initdb
a new temporary database이며, 무작위 포트에 pg_ctl
로 시작 무엇을 할 수 있는지.
나는 강하게 그래서 당신이 테스트를 실행하는 시스템에 로컬로 설치된 PostgreSQL의 충돌 위험을 감수하지 않는 기본 포트가 아닌 포트에 임시 포스트 그레스에게 을 실행 추천 .
(ecpg의 의미, 프리 프로세서 기반의 C 언어 확장으로 C 소스 코드에 포함 기본적으로 PostgreSQL을 클라이언트에 "내장의 PostgreSQL이 입니다. 아직 실행중인 서버가 필요하고 그것은에 약간 불쾌한입니다 . 사용 정말 권장되지는 대부분 쉽게 다양한 다른 데이터베이스에서 포팅하기 위해 존재)
(가) 자바에서 단위 테스트를 위해 설계되었습니다 "임베디드"포스트그레스 SQL 서버이다.
https://github.com/yandex-qatools/postgresql-embedded
임베디드 PostgreSQL은 단위 테스트에 포스트 그레스 바이너리를 실행하기위한 플랫폼 중립적 인 방법을 제공합니다. 코드의 대부분은 제쳐두고 같이 Flapdoodle OSS's embed process
왜 이것이 정답으로 표시되지 않습니까? 이 라이브러리에 단점이 있습니까? 그것은 postgre의 모든 기능을 가지고 있습니까? 그것은 모듈 등으로 embelished 수 있습니까? –
나는 그것이 잘 작동 함을 간증 할 수있다. 표준 포스트그레스. 사용 예 : https://github.com/icgc-dcc/dcc-submission/blob/develop/dcc-submission-loader/src/test/java/org/icgc/dcc/submission/loader/util/EmbeddedPostgres.java https : // github.com/icgc-dcc/dcc-submission/blob/c5f6e38783fe164b35a63ac15dfb22fe9559d5f5/dcc-submission-loader/src/test/java/org/icgc/dcc/submission/loader/util/AbstractPostgressTest.java – btiernay
'포함 된' 불분명하지만 나에게 그것은 H2와 같이 기억에 남을 것입니다. yandex-qatools/postgresql-embedded는이 정의를 따르지 않습니다. 실제로 지정된 postgres 버전을 다운로드하고, 임시 디렉토리에 압축을 풀고 서버를 시작합니다.이 모든 것이 디스크 오버 헤드로 이어지고, 이는 비 엔터프라이즈 환경에서는 거의 받아 들일 수 없습니다. 나는이 샘플 프로젝트 (https://github.com/scottmf/postgresql-integration-test)를 심사 중이며, 여전히 좋은 예입니다. 내가 틀렸다면 나를 바로 잡으십시오. – Valya
통합 (또는 유사한) 테스트 스위트에서 포스트 프로세스 버전을 실행하려는 경우 postgresql-embedded이 정상적으로 작동합니다.
저는을 작성하여 forked 버전의 postgresql-embedded를 maven wrapper로 사용할 수 있습니다.
@btiernay (yandex-qatools)가 제안한 프로젝트를 시도했습니다. 나는 며칠을 좋은 시간을 보냈고, 공격을하지 않고도 공용 인터넷에 들어가기보다는 내부 리포지토리에서 바이너리를 다운로드하고 싶을 때 필자의 경우에는 작동하지 않는 설계된 솔루션을 사용했다. 이론적으로는 지원하지만 사실은 지원하지 않습니다.
나는 otj-pg-embedded을 사용하여 끝났으며 매력적으로 작동합니다. 코멘트에서 언급되었으므로 여기서도 언급 할 것입니다.
단위 테스트 및 로컬 개발 모두에 대해 규칙이 아닌 독립형 DB로 사용했습니다.
종속성 :
<dependency>
<groupId>com.opentable.components</groupId>
<artifactId>otj-pg-embedded</artifactId>
<version>0.7.1</version>
</dependency>
코드 :
@Bean
public DataSource dataSource(PgBinaryResolver pgBinaryResolver) throws IOException {
EmbeddedPostgres pg = EmbeddedPostgres.builder()
.setPgBinaryResolver(pgBinaryResolver)
.start();
// It doesn't not matter which databse it will be after all. We just use the default.
return pg.getPostgresDatabase();
}
@Bean
public PgBinaryResolver nexusPgBinaryResolver() {
return (system, machineHardware) -> {
String url = getArtifactUrl(postgrePackage, system + SEPARATOR + machineHardware);
log.info("Will download embedded Postgre package from: {}", url);
return new URL(url).openConnection().getInputStream();
};
}
private static String getArtifactUrl(PostgrePackage postgrePackage, String classifier) {
// Your internal repo URL logic
}
'.tql-pg-embedded'에서'.sql' 파일로 스키마를 생성 할 수 있습니까? 나는 봄을 사용하지 않고있다. 나는 '규칙'이없는 어떤 예도 찾지 못했다. – tuk
그게 내가하는 일이기도합니다. 설치 프로그램없이 Postgres를 설정하는 배치 파일/셸 스크립트는 약 5 줄의 코드입니다. 모든 유닛 테스트 실행에서 initdb를 수행하는 것은 아마도 너무 느릴 것입니다. –
@a_horse_with_no_name 예, initdb 이전의 데이터베이스를 압축 해제하거나 빌드 프로세스 중에 initdb가없는 깨끗한 템플릿에서 복사 할 수 있습니다. Pg를 업그레이드 할 때 고통스러워. 개인적으로 initdb는 충분히 빠르지 만 회전 디스크는 더 이상 사용하지 않습니다. 배치 파일과 관련하여 주요 과제는 충돌하지 않는 포트를 사용하는 것입니다 (특히 동시 테스트를 실행하는 경우). 그리고 수행이 끝난 후 서버를 종료해야합니다. 특히 Windows에서 서버가 중지 될 때까지 datadir을 삭제할 수 없습니다. –
당신은 "프로세스 지향적 인 부분을 라이브러리로 패키징하는 것은 의미가 없다"고 말합니다. 왜 안돼? 요즘 Java 라이브러리를 사용하여 IE를 자동화 할 수 있습니다. 물론 프로세스가 백그라운드에서 생성되지만 Java 라이브러리를 사용하여 편안하게 말할 수 있습니다. PostgreSQL에서도 마찬가지입니다. PostgreSQL 인스톨러를 임베딩함으로써 그 목표에 가까워 질 수 있지만, 그렇게 설정하는 데는 많은 상용구가 있습니다. –