2010-12-10 1 views
6

와 MySQL 서버 비웃음 그러나 나는 모든 것을 포함합니다 : 내 대학에서 프로젝트의 일환으로, 우리는을 만들, 일부 세부 사항, irrlevant 수 있습니다 나는 데이터베이스와 정말로 능숙하지 않다 때문에 자바

을 JSP, 서블릿을 사용하고 MySQL 서버를 백엔드로 사용하는 웹 사이트.

본인은 DB에 테이블을 설정하고 상호 작용하는 자바 클래스를 만드는 담당입니다. 그러나 우리는 대학 내부에서만 MySQL 서버에 연결할 수 있으며 우리 모두 (7 명)는 주로 집에서 작업합니다.

문자열 (쿼리를 나타내는)을 사용하고 ResultSet을 반환하는 메서드가있는 QueryHandler 인터페이스를 만듭니다. 내 질문은 이것입니다 : 어떻게 데이터베이스를 시뮬레이션하고 다른 DBHandler을 사용하고 차이를 알지 못하게하고 실제 MySQL 데이터베이스에 연결하지 않고도 다른 쿼리를 테스트 할 수 있도록이 인터페이스를 구현하는 클래스를 어떻게 만듭니 까?

EDIT : SQL 데이터베이스의 차이점에 대해서는 잘 모르겠지만 분명히 MySQL에서 실행하는 모든 쿼리는 모의 객체에서 실행되어야합니다.

+2

가 나는 :) – BoltClock

답변

6

테스트 용으로 MySQL 데이터베이스를 설치하지 않는 이유는 무엇입니까? Windows, Mac 및 Linux에서 실행되며 리소스가 너무 많이 필요하지 않습니다. 로컬 테스트를 위해 노트북에 설치했습니다.

+4

그것은 문제가되지 않습니다하지만 창의성 ... 자신의 컴퓨터에 일을 DB를 MySQL을 설치하는 사용자의 그룹 구성원 각각을 얻고 설정하는 것보다 이러한 클래스를 작성하기 위해 더 많은 노력 생각 단위 테스트 등? 모의 서버 자체가 우리의 트렁크 (우리는 SVN 사용)에 있지 않을 것입니다 - 즉, 다른 사람들이 모크 서버를 사용할 수 없게됩니다. –

+1

@amir, 모든 개발자 컴퓨터에 mysql이 있어야합니다. 현실 세계에서는 개발을위한 데이터베이스를 제공하는 것이 일반적입니다. 이 경우 학생들의 컴퓨터에 dbs를 입력하십시오. – hvgotcodes

+0

MySQL이 개발 환경의 표준 부분이고 단위 테스트 @BeforeClass가 테이블과 데이터가 올바르게 설정되었는지 확인하는 경우에는 황금색입니다. –

1

시도 derby. SqlServer로 돌아갈 때 드라이버를 변경하지 않아도되는 경우 테스트 할 수있는 무료 서버입니다. 당신이 실행할 수있는 쿼리의 종류가 제한 될 수도 있습니다. SqlServer에 표준 SQL 외부에 특별한 구문이 있는지 확실하지 않습니다.

1

어떻게 오프라인 테스트에 대한 HSQLDB 사용에 대한? 그것은 MySQL DB와 똑같이 행동하지는 않지만, 대부분의 요구 사항을 충족시켜야하는 메모리 SQL DB가 빠릅니다.

1

내 경험상 가장 좋은 방법은 여러 데이터베이스 인스턴스 및 스키마입니다. 일반적으로 각 사용자는 실행중인 응용 프로그램을 점검하기 위해 각자의 개발 작업을 수행해야합니다. 하나는 실행중인 단위 테스트 용 자동화 빌드이고 다른 하나는 각 사용자가 단위 테스트를 실행하는 것입니다. 물론 데모, 통합 테스트를위한 인스턴스/스키마. 실용적인면과 별개로이 작업을 수행하면 앱/데이터베이스를 배포/업그레이드 할 때 오류가 발생하지 않습니다.

당신은 DAO 계층 인 DAO 구현을 단위 테스트 수준에서 실제 데이터베이스에 대한 액세스를 필요로하는 유일한 코드를 가지고 가정, 비즈니스 계층은 모의 DAO 구현을 사용해야합니다.

2

API에 결함이있는 것으로 보입니다. ResultSet을 클라이언트에 반환하면 안됩니다. 그렇게함으로써 클라이언트는 관계형 데이터베이스 백엔드에 의존하게됩니다. 데이터 액세스 계층은 데이터가 실제로 구조화되고 저장되는 방식에 대한 모든 세부 정보를 숨겨야합니다.

는 대신의 ResultSet을 반환하는 목록을 반환하거나 데이터 액세스 구성 요소에 쓸 수있는 스트림을 제공하기 위해 클라이언트를 허용하는 것이 좋습니다.

이것은 API의 클라이언트를위한 단위 테스트 사소한 것 당신이 마음대로 저장 메커니즘을 교환 할 수 있습니다.

+0

일반적으로 ResultSet 대신 무엇이 반환됩니까? 목록은 어떻게 동일한 기능을 제공합니까? –

관련 문제